14 Jul, 2013

1 commit

  • Pull MIPS updates from Ralf Baechle:
    "MIPS updates:

    - All the things that didn't make 3.10.
    - Removes the Windriver PPMC platform. Nobody will miss it.
    - Remove a workaround from kernel/irq/irqdomain.c which was there
    exclusivly for MIPS. Patch by Grant Likely.
    - More small improvments for the SEAD 3 platform
    - Improvments on the BMIPS / SMP support for the BCM63xx series.
    - Various cleanups of dead leftovers.
    - Platform support for the Cavium Octeon-based EdgeRouter Lite.

    Two large KVM patchsets didn't make it for this pull request because
    their respective authors are vacationing"

    * 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus: (124 commits)
    MIPS: Kconfig: Add missing MODULES dependency to VPE_LOADER
    MIPS: BCM63xx: CLK: Add dummy clk_{set,round}_rate() functions
    MIPS: SEAD3: Disable L2 cache on SEAD-3.
    MIPS: BCM63xx: Enable second core SMP on BCM6328 if available
    MIPS: BCM63xx: Add SMP support to prom.c
    MIPS: define write{b,w,l,q}_relaxed
    MIPS: Expose missing pci_io{map,unmap} declarations
    MIPS: Malta: Update GCMP detection.
    Revert "MIPS: make CAC_ADDR and UNCAC_ADDR account for PHYS_OFFSET"
    MIPS: APSP: Remove
    SSB: Kconfig: Amend SSB_EMBEDDED dependencies
    MIPS: microMIPS: Fix improper definition of ISA exception bit.
    MIPS: Don't try to decode microMIPS branch instructions where they cannot exist.
    MIPS: Declare emulate_load_store_microMIPS as a static function.
    MIPS: Fix typos and cleanup comment
    MIPS: Cleanup indentation and whitespace
    MIPS: BMIPS: support booting from physical CPU other than 0
    MIPS: Only set cpu_has_mmips if SYS_SUPPORTS_MICROMIPS
    MIPS: GIC: Fix gic_set_affinity infinite loop
    MIPS: Don't save/restore OCTEON wide multiplier state on syscalls.
    ...

    Linus Torvalds
     

07 Jul, 2013

1 commit

  • Pull irqdomain refactoring from Grant Likely:
    "This is the long awaited simplification of irqdomain. It gets rid of
    the different types of irq domains and instead both linear and tree
    mappings can be supported in a single domain. Doing this removes a
    lot of special case code and makes irq domains simpler to understand
    overall"

    * tag 'irqdomain-for-linus' of git://git.secretlab.ca/git/linux:
    irq: fix checkpatch error
    irqdomain: Include hwirq number in /proc/interrupts
    irqdomain: make irq_linear_revmap() a fast path again
    irqdomain: remove irq_domain_generate_simple()
    irqdomain: Refactor irq_domain_associate_many()
    irqdomain: Beef up debugfs output
    irqdomain: Clean up aftermath of irq_domain refactoring
    irqdomain: Eliminate revmap type
    irqdomain: merge linear and tree reverse mappings.
    irqdomain: Add a name field
    irqdomain: Replace LEGACY mapping with LINEAR
    irqdomain: Relax failure path on setting up mappings

    Linus Torvalds
     

03 Jul, 2013

1 commit

  • Pull core irq changes from Ingo Molnar:
    "The main changes:

    - generic-irqchip driver additions, cleanups and fixes

    - 3 new irqchip drivers: ARMv7-M NVIC, TB10x and Marvell Orion SoCs

    - irq_get_trigger_type() simplification and cross-arch cleanup

    - various cleanups, simplifications

    - documentation updates"

    * 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (26 commits)
    softirq: Use _RET_IP_
    genirq: Add the generic chip to the genirq docbook
    genirq: generic-chip: Export some irq_gc_ functions
    genirq: Fix can_request_irq() for IRQs without an action
    irqchip: exynos-combiner: Staticize combiner_init
    irqchip: Add support for ARMv7-M NVIC
    irqchip: Add TB10x interrupt controller driver
    irqdomain: Use irq_get_trigger_type() to get IRQ flags
    MIPS: octeon: Use irq_get_trigger_type() to get IRQ flags
    arm: orion: Use irq_get_trigger_type() to get IRQ flags
    mfd: stmpe: use irq_get_trigger_type() to get IRQ flags
    mfd: twl4030-irq: Use irq_get_trigger_type() to get IRQ flags
    gpio: mvebu: Use irq_get_trigger_type() to get IRQ flags
    genirq: Add irq_get_trigger_type() to get IRQ flags
    genirq: Irqchip: document gcflags arg of irq_alloc_domain_generic_chips
    genirq: Set irq thread to RT priority on creation
    irqchip: Add support for Marvell Orion SoCs
    genirq: Add kerneldoc for irq_disable.
    genirq: irqchip: Add mask to block out invalid irqs
    genirq: Generic chip: Add linear irq domain support
    ...

    Linus Torvalds
     

25 Jun, 2013

1 commit

  • Use irq_get_trigger_type() to get the IRQ trigger type flags
    instead calling irqd_get_trigger_type(irq_desc_get_irq_data(virq))

    Signed-off-by: Javier Martinez Canillas
    Acked-by: Grant Likely
    Cc: Linus Walleij
    Cc: Samuel Ortiz
    Cc: Jason Cooper
    Cc: Andrew Lunn
    Cc: Russell King
    Cc: Ralf Baechle
    Cc: Benjamin Herrenschmidt
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: linux-mips@linux-mips.org
    Link: http://lkml.kernel.org/r/1371228049-27080-8-git-send-email-javier.martinez@collabora.co.uk
    Signed-off-by: Thomas Gleixner

    Javier Martinez Canillas
     

24 Jun, 2013

4 commits

  • ERROR: space required before the open parenthesis '('
    WARNING: Prefer pr_warn(... to pr_warning(...
    Just fix above 2 issue.

    Signed-off-by: Kefeng Wang
    Signed-off-by: Grant Likely

    Kefeng Wang
     
  • Over the years, irq_linear_revmap() gained tests and checks to make sure
    callers were using it safely, which while important, also make it less
    of a fast path. After the irqdomain refactoring done recently, it is now
    possible to make irq_linear_revmap() a fast path again. This patch moves
    irq_linear_revmap() to the header file and makes it a static inline so
    that interrupt controller drivers using a linear mapping can decode the
    virq from a hwirq in just a couple of instructions.

    Signed-off-by: Grant Likely

    Grant Likely
     
  • Nobody calls it; remove the function

    Signed-off-by: Grant Likely

    Grant Likely
     
  • Originally, irq_domain_associate_many() was designed to unwind the
    mapped irqs on a failure of any individual association. However, that
    proved to be a problem with certain IRQ controllers. Some of them only
    support a subset of irqs, and will fail when attempting to map a
    reserved IRQ. In those cases we want to map as many IRQs as possible, so
    instead it is better for irq_domain_associate_many() to make a
    best-effort attempt to map irqs, but not fail if any or all of them
    don't succeed. If a caller really cares about how many irqs got
    associated, then it should instead go back and check that all of the
    irqs is cares about were mapped.

    The original design open-coded the individual association code into the
    body of irq_domain_associate_many(), but with no longer needing to
    unwind associations, the code becomes simpler to split out
    irq_domain_associate() to contain the bulk of the logic, and
    irq_domain_associate_many() to be a simple loop wrapper.

    This patch also adds a new error check to the associate path to make
    sure it isn't called for an irq larger than the controller can handle,
    and adds locking so that the irq_domain_mutex is held while setting up a
    new association.

    v3: Fixup missing change to irq_domain_add_tree()
    v2: Fixup x86 warning. irq_domain_associate_many() no longer returns an
    error code, but reports errors to the printk log directly. In the
    majority of cases we don't actually want to fail if there is a
    problem, but rather log it and still try to boot the system.

    Signed-off-by: Grant Likely

    irqdomain: Fix flubbed irq_domain_associate_many refactoring

    commit d39046ec72, "irqdomain: Refactor irq_domain_associate_many()" was
    missing the following hunk which causes a boot failure on anything using
    irq_domain_add_tree() to allocate an irq domain.

    Signed-off-by: Grant Likely
    Cc: Michael Neuling
    Cc: Benjamin Herrenschmidt ,
    Cc: Thomas Gleixner ,
    Cc: Stephen Rothwell

    Grant Likely
     

18 Jun, 2013

1 commit

  • The MIPS interrupt controllers are all registering their own irq_domains
    now. Drop the MIPS specific code because it is no longer needed.

    Signed-off-by: Grant Likely
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/5458/
    Signed-off-by: Ralf Baechle

    Grant Likely
     

10 Jun, 2013

8 commits

  • This patch increases the amount of output produced by the
    irq_domain_mapping debugfs file by first listing all of the registered
    irq domains at the beginning of the output, and then by including all
    mapped IRQs in the output, not just the active ones. It is very useful
    when debugging irqdomain issues to be able to see the entire list of
    mapped irqs, not just the ones that happen to be connected to devices.

    Signed-off-by: Grant Likely

    Grant Likely
     
  • After refactoring the irqdomain code, there are a number of API
    functions that are merely empty wrappers around core code. Drop those
    wrappers out of the C file and replace them with static inlines in the
    header.

    Signed-off-by: Grant Likely

    Grant Likely
     
  • The NOMAP irq_domain type is only used by a handful of interrupt
    controllers and it unnecessarily complicates the code by adding special
    cases on how to look up mappings and different revmap functions are used
    for each type which need to validate the correct type is passed to it
    before performing the reverse map. Eliminating the revmap_type and
    making a single reverse mapping function simplifies the code. It also
    shouldn't be any slower than having separate revmap functions because
    the type of the revmap needed to be checked anyway.

    The linear and tree revmap types were already merged in a previous
    patch. This patch rolls the NOMAP or direct mapping behaviour into the
    same domain code making is possible for an irq domain to do any mapping
    type; linear, tree or direct; and that the mapping will be transparent
    to the interrupt controller driver.

    With this change, direct mappings will get stored in the linear or tree
    mapping for consistency. Reverse mapping from the hwirq to virq will go
    through the normal lookup process. However, any controller using a
    direct mapping can take advantage of knowing that hwirq==virq for any
    mapped interrupts skip doing a revmap lookup when handling IRQs.

    Signed-off-by: Grant Likely

    Grant Likely
     
  • Keeping them separate makes irq_domain more complex and adds a lot of
    code (as proven by the diffstat). Merging them simplifies the whole
    scheme. This change makes it so both the tree and linear methods can be
    used by the same irq_domain instance. If the hwirq is less than the
    ->linear_size, then the linear map is used to reverse map the hwirq.
    Otherwise the radix tree is used. The test for which map to use is no
    more expensive that the existing code, so the performance of fast path
    is preserved.

    It also means that complex interrupt controllers can use both the
    linear map and a tree in the same domain. This may be useful for an
    interrupt controller with a base set of core irqs and a large number
    of GPIOs which might be used as irqs. The linear map could cover the
    core irqs, and the tree used for thas irqs. The linear map could
    cover the core irqs, and the tree used for the gpios.

    v2: Drop reorganization of revmap data

    Signed-off-by: Grant Likely
    Cc: Paul Mundt
    Cc: Benjamin Herrenschmidt
    Cc: Thomas Gleixner
    Cc: Rob Herring

    Grant Likely
     
  • This patch adds a name field to the irq_domain structure to help mere
    mortals understand the mappings between irq domains and virqs. It also
    converts a number of places that have open-coded some kind of fudging
    an irqdomain name to use the new field. This means a more consistent
    display of names in irq domain log messages and debugfs output.

    Signed-off-by: Grant Likely

    Grant Likely
     
  • The LEGACY mapping unnecessarily complicates the irqdomain code and
    can easily be implemented with a linear mapping. By ripping it out
    and replacing it with the LINEAR mapping the object size of
    irqdomain.c shrinks by about 330 bytes (ARMv7) which offsets the
    additional allocation required by the linear map. It also makes it
    possible for current LEGACY map users to pre-allocate irq_descs for a
    subset of the hwirqs and dynamically allocate the rest as needed.

    Signed-off-by: Grant Likely
    Cc: Paul Mundt
    Cc: Benjamin Herrenschmidt
    Cc: Thomas Gleixner
    Cc: Rob Herring

    Grant Likely
     
  • Commit 98aa468e, "irqdomain: Support for static IRQ mapping and
    association" introduced an API for directly associating blocks of hwirqs
    to linux irqs. However, if any irq in that block failed to map (say if
    the mapping functions returns an error because the irq is already
    mapped) then the whole thing will fail and roll back. This is probably
    too aggressive since there are valid reasons why a mapping may fail.
    ie. Firmware may have a particular IRQ marked as unusable.

    This patch drops the error path out of irq_domain_associate(). If a
    mapping fails, then it is simply skipped. There is no reason to fail the
    entire allocation.

    v2: Still output an information message on failed mappings and make sure
    attempted mapping gets cleared out of the irq_data structure.

    Signed-off-by: Grant Likely
    Cc: Paul Mundt
    Cc: Benjamin Herrenschmidt
    Cc: Thomas Gleixner

    Grant Likely
     
  • Grant Likely
     

09 Jun, 2013

3 commits


29 May, 2013

1 commit

  • Provide infrastructure for irq chip implementations which work on
    linear irq domains.

    - Interface to allocate multiple generic chips which are associated to
    the irq domain.

    - Interface to get the generic chip pointer for a particular hardware
    interrupt in the domain.

    - irq domain mapping function to install the chip for a particular
    interrupt.

    Note: This lacks a removal function for now.

    [ Sebastian Hesselbarth: Mask cache and pointer math fixups ]

    Signed-off-by: Thomas Gleixner
    Cc: Thomas Petazzoni
    Cc: Andrew Lunn
    Cc: Russell King - ARM Linux
    Cc: Jason Cooper
    Cc: Arnd Bergmann
    Cc: Jean-Francois Moine
    Cc: devicetree-discuss@lists.ozlabs.org
    Cc: Rob Herring
    Cc: Jason Gunthorpe
    Cc: Gregory Clement
    Cc: Gerlando Falauto
    Cc: Rob Landley
    Acked-by: Grant Likely
    Cc: Maxime Ripard
    Cc: Ezequiel Garcia
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: Sebastian Hesselbarth
    Link: http://lkml.kernel.org/r/20130506142539.450634298@linutronix.de
    Signed-off-by: Thomas Gleixner

    Thomas Gleixner
     

06 May, 2013

1 commit

  • Some interrupt controllers refuse to map interrupts marked as
    "protected" by firwmare. Since we try to map everyting in the
    device-tree on some platforms, we end up with a lot of nasty
    WARN's in the boot log for what is a normal situation on those
    machines.

    This defines a specific return code (-EPERM) from the host map()
    callback which cause irqdomain to fail silently.

    MPIC is updated to return this when hitting a protected source
    printing only a single line message for diagnostic purposes.

    Signed-off-by: Benjamin Herrenschmidt

    Benjamin Herrenschmidt
     

30 Nov, 2012

1 commit


10 Oct, 2012

1 commit

  • Currently we rely on all IRQ chip instances to dynamically
    allocate their IRQ descriptors unless they use the linear
    IRQ domain. So for irqdomain_add_legacy() and
    irqdomain_add_simple() the caller need to make sure that
    descriptors are allocated.

    Let's slightly augment the yet unused irqdomain_add_simple()
    to also allocate descriptors as a means to simplify usage
    and avoid code duplication throughout the kernel.

    We warn if descriptors cannot be allocated, e.g. if a
    platform has the bad habit of hogging descriptors at boot
    time.

    Cc: Thomas Gleixner
    Cc: Grant Likely
    Cc: Paul Mundt
    Cc: Russell King
    Cc: Lee Jones
    Reviewed-by: Rob Herring
    Signed-off-by: Linus Walleij

    Linus Walleij
     

25 Jul, 2012

2 commits

  • When the map operation fails log the error code we get and add a WARN_ON()
    so we get a backtrace (which should help work out which interrupt is the
    source of the issue).

    Signed-off-by: Mark Brown
    Signed-off-by: Grant Likely

    Mark Brown
     
  • With the current state of irq_domain, the reverse map is always updated
    when new IRQs get mapped. This means that the irq_find_mapping() function
    can be simplified to execute the revmap lookup functions unconditionally

    This patch adds lookup functions for the revmaps that don't yet have one
    and removes the slow path lookup code path.

    v8: Broke out unrelated changes into separate patches. Rebased on Paul's irq
    association patches.
    v7: Rebased to irqdomain/next for v3.4 and applied before the removal of 'hint'
    v6: Remove the slow path entirely. The only place where the slow path
    could get called is for a linear mapping if the hwirq number is larger
    than the linear revmap size. There shouldn't be any interrupt
    controllers that do that.
    v5: rewrite to not use a ->revmap() callback. It is simpler, smaller,
    safer and faster to open code each of the revmap lookups directly into
    irq_find_mapping() via a switch statement.
    v4: Fix build failure on incorrect variable reference.

    Signed-off-by: Grant Likely
    Cc: Benjamin Herrenschmidt
    Cc: Thomas Gleixner
    Cc: Milton Miller
    Cc: Paul Mundt
    Cc: Rob Herring

    Grant Likely
     

11 Jul, 2012

7 commits

  • irq_create_direct_mapping can only be used with the NOMAP type. Make
    the function test to ensure it is passed the correct type of
    irq_domain.

    Signed-off-by: Grant Likely
    Cc: Paul Mundt
    Cc: Benjamin Herrenschmidt
    Cc: Thomas Gleixner
    Cc: Rob Herring

    Grant Likely
     
  • In preparation to remove the slow revmap path, eliminate the public
    radix revmap lookup functions. This simplifies the code and makes the
    slowpath removal patch a lot simpler.

    Signed-off-by: Grant Likely
    Cc: Paul Mundt
    Cc: Benjamin Herrenschmidt
    Cc: Thomas Gleixner
    Cc: Rob Herring

    Grant Likely
     
  • This adds a new strict mapping API for supporting creation of linux IRQs
    at existing positions within the domain. The new routines are as follows:

    For dynamic allocation and insertion to specified ranges:

    - irq_create_identity_mapping()
    - irq_create_strict_mappings()

    These will allocate and associate a range of linux IRQs at the specified
    location. This can be used by controllers that have their own static linux IRQ
    definitions to map a hwirq range to, as well as for platforms that wish to
    establish 1:1 identity mapping between linux and hwirq space.

    For insertion to specified ranges by platforms that do their own irq_desc
    management:

    - irq_domain_associate()
    - irq_domain_associate_many()

    These in turn call back in to the domain's ->map() routine, for further
    processing by the platform. Disassociation of IRQs get handled through
    irq_dispose_mapping() as normal.

    With these in place it should be possible to begin migration of legacy IRQ
    domains to linear ones, without requiring special handling for static vs
    dynamic IRQ definitions in DT vs non-DT paths. This also makes it possible
    for domains with static mappings to adopt whichever tree model best fits
    their needs, rather than simply restricting them to linear revmaps.

    Signed-off-by: Paul Mundt
    [grant.likely: Reorganized irq_domain_associate{,_many} to have all logic in one place]
    [grant.likely: Add error checking for unallocated irq_descs at associate time]
    Signed-off-by: Grant Likely
    Cc: Benjamin Herrenschmidt
    Cc: Thomas Gleixner
    Cc: Rob Herring

    Grant Likely
     
  • At irq_setup_virq() time all of the data needed to update the reverse
    map is available, but the current code ignores it and relies upon the
    slow path to insert revmap records. This patch adds revmap updating
    to the setup path so the slow path will no longer be necessary.

    Signed-off-by: Grant Likely
    Cc: Paul Mundt
    Cc: Benjamin Herrenschmidt
    Cc: Thomas Gleixner
    Cc: Rob Herring

    Grant Likely
     
  • This patch moves the irq disassociation code out into a separate
    function in preparation to extend irq_setup_virq to handle multiple
    irqs and rename it for use by interrupt controller drivers. The new
    function will be used by irq_setup_virq() in its error path.

    Signed-off-by: Grant Likely
    Acked-by: Benjamin Herrenschmidt
    Cc: Paul Mundt
    Cc: Thomas Gleixner
    Cc: Rob Herring

    Grant Likely
     
  • The revmap type should be linear for irq_domain_add_linear function.

    Signed-off-by: Dong Aisheng
    Signed-off-by: Grant Likely

    Dong Aisheng
     
  • A large proportion of interrupt controllers that support legacy mappings
    do so because non-DT systems need to use fixed IRQ numbers when registering
    devices via buses but can otherwise use a linear mapping. The interrupt
    controller itself typically is not affected by the mapping used and best
    practice is to use a linear mapping where possible so drivers frequently
    select at runtime depending on if a legacy range has been allocated to
    them.

    Standardise this behaviour by providing irq_domain_register_simple() which
    will allocate a linear mapping unless a positive first_irq is provided in
    which case it will fall back to a legacy mapping. This helps make best
    practice for irq_domain adoption clearer.

    Signed-off-by: Mark Brown
    Signed-off-by: Grant Likely

    Mark Brown
     

18 Jun, 2012

1 commit


16 Jun, 2012

3 commits

  • Where irq_domain_associate() is called in irq_create_mapping, there is
    no need to test for IRQ_DOMAIN_MAP_LEGACY because it is already tested
    for earlier in the routine.

    Signed-off-by: Grant Likely
    Cc: Paul Mundt
    Cc: Benjamin Herrenschmidt
    Cc: Thomas Gleixner
    Cc: Rob Herring

    Grant Likely
     
  • While common irqdesc allocation is node aware, the irqdomain code is not.

    Presently we observe a number of regressions/inconsistencies on
    NUMA-capable platforms:

    - Platforms using irqdomains with legacy mappings, where the
    irq_descs are allocated node-local and the irqdomain data
    structure is not.

    - Drivers implementing irqdomains will lose node locality
    regardless of the underlying struct device's node id.

    This plugs in NUMA node id proliferation across the various allocation
    callsites by way of_node_to_nid() node lookup. While of_node_to_nid()
    does the right thing for OF-capable platforms it doesn't presently handle
    the non-DT case. This is trivially dealt with by simply wraping in to
    numa_node_id() unconditionally.

    Signed-off-by: Paul Mundt
    Cc: Benjamin Herrenschmidt
    Cc: Thomas Gleixner
    Cc: Rob Herring
    Signed-off-by: Grant Likely

    Paul Mundt
     
  • The pattern (np ? np->full_name : "") is rather common in the
    kernel, but can also make for quite long lines. This patch adds a new
    inline function, of_node_full_name() so that the test for a valid node
    pointer doesn't need to be open coded at all call sites.

    Signed-off-by: Grant Likely
    Cc: Paul Mundt
    Cc: Benjamin Herrenschmidt
    Cc: Thomas Gleixner

    Grant Likely
     

20 May, 2012

3 commits