21 Nov, 2019

1 commit

  • Remove and from being included directly as part
    of the include/linux/of_pci.h, and remove superfluous declaration of struct
    of_phandle_args.

    Move users of include to include and
    directly rather than rely on both being included transitively
    through .

    Link: https://lore.kernel.org/r/20190903113059.2901-1-kw@linux.com
    Signed-off-by: Krzysztof Wilczynski
    Signed-off-by: Bjorn Helgaas
    Reviewed-by: Rob Herring

    Krzysztof Wilczynski
     

07 Aug, 2019

1 commit


09 Jul, 2019

1 commit

  • Pull irq updates from Thomas Gleixner:
    "The irq departement provides the usual mixed bag:

    Core:

    - Further improvements to the irq timings code which aims to predict
    the next interrupt for power state selection to achieve better
    latency/power balance

    - Add interrupt statistics to the core NMI handlers

    - The usual small fixes and cleanups

    Drivers:

    - Support for Renesas RZ/A1, Annapurna Labs FIC, Meson-G12A SoC and
    Amazon Gravition AMR/GIC interrupt controllers.

    - Rework of the Renesas INTC controller driver

    - ACPI support for Socionext SoCs

    - Enhancements to the CSKY interrupt controller

    - The usual small fixes and cleanups"

    * 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (39 commits)
    irq/irqdomain: Fix comment typo
    genirq: Update irq stats from NMI handlers
    irqchip/gic-pm: Remove PM_CLK dependency
    irqchip/al-fic: Introduce Amazon's Annapurna Labs Fabric Interrupt Controller Driver
    dt-bindings: interrupt-controller: Add Amazon's Annapurna Labs FIC
    softirq: Use __this_cpu_write() in takeover_tasklets()
    irqchip/mbigen: Stop printing kernel addresses
    irqchip/gic: Add dependency for ARM_GIC_MAX_NR
    genirq/affinity: Remove unused argument from [__]irq_build_affinity_masks()
    genirq/timings: Add selftest for next event computation
    genirq/timings: Add selftest for irqs circular buffer
    genirq/timings: Add selftest for circular array
    genirq/timings: Encapsulate storing function
    genirq/timings: Encapsulate timings push
    genirq/timings: Optimize the period detection speed
    genirq/timings: Fix timings buffer inspection
    genirq/timings: Fix next event index function
    irqchip/qcom: Use struct_size() in devm_kzalloc()
    irqchip/irq-csky-mpintc: Remove unnecessary loop in interrupt handler
    dt-bindings: interrupt-controller: Update csky mpintc
    ...

    Linus Torvalds
     

19 Jun, 2019

1 commit

  • Based on 2 normalized pattern(s):

    this program is free software you can redistribute it and or modify
    it under the terms of the gnu general public license version 2 as
    published by the free software foundation

    this program is free software you can redistribute it and or modify
    it under the terms of the gnu general public license version 2 as
    published by the free software foundation #

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-only

    has been chosen to replace the boilerplate/reference in 4122 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Enrico Weigelt
    Reviewed-by: Kate Stewart
    Reviewed-by: Allison Randal
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190604081206.933168790@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     

11 Jun, 2019

1 commit

  • Add support for Amazon Graviton custom variant of GICv2m, where the message
    is encoded using the MSI message address, as opposed to standard
    GICv2m, where the SPI number is encoded in the MSI message data.

    In addition, the Graviton flavor of GICv2m is used along GICv3 (and not
    GICv2).

    Co-developed-by: Benjamin Herrenschmidt
    Signed-off-by: Benjamin Herrenschmidt
    Signed-off-by: Zeev Zilberman
    Signed-off-by: Marc Zyngier

    Zeev Zilberman
     

20 May, 2019

1 commit

  • Pull IRQ chip updates from Ingo Molnar:
    "A late irqchips update:

    - New TI INTR/INTA set of drivers

    - Rewrite of the stm32mp1-exti driver as a platform driver

    - Update the IOMMU MSI mapping API to be RT friendly

    - A number of cleanups and other low impact fixes"

    * 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (34 commits)
    iommu/dma-iommu: Remove iommu_dma_map_msi_msg()
    irqchip/gic-v3-mbi: Don't map the MSI page in mbi_compose_m{b, s}i_msg()
    irqchip/ls-scfg-msi: Don't map the MSI page in ls_scfg_msi_compose_msg()
    irqchip/gic-v3-its: Don't map the MSI page in its_irq_compose_msi_msg()
    irqchip/gicv2m: Don't map the MSI page in gicv2m_compose_msi_msg()
    iommu/dma-iommu: Split iommu_dma_map_msi_msg() in two parts
    genirq/msi: Add a new field in msi_desc to store an IOMMU cookie
    arm64: arch_k3: Enable interrupt controller drivers
    irqchip/ti-sci-inta: Add msi domain support
    soc: ti: Add MSI domain bus support for Interrupt Aggregator
    irqchip/ti-sci-inta: Add support for Interrupt Aggregator driver
    dt-bindings: irqchip: Introduce TISCI Interrupt Aggregator bindings
    irqchip/ti-sci-intr: Add support for Interrupt Router driver
    dt-bindings: irqchip: Introduce TISCI Interrupt router bindings
    gpio: thunderx: Use the default parent apis for {request,release}_resources
    genirq: Introduce irq_chip_{request,release}_resource_parent() apis
    firmware: ti_sci: Add helper apis to manage resources
    firmware: ti_sci: Add RM mapping table for am654
    firmware: ti_sci: Add support for IRQ management
    firmware: ti_sci: Add support for RM core ops
    ...

    Linus Torvalds
     

03 May, 2019

1 commit

  • gicv2m_compose_msi_msg() may be called from non-preemptible context.
    However, on RT, iommu_dma_map_msi_msg() requires to be called from a
    preemptible context.

    A recent change split iommu_dma_map_msi_msg() in two new functions:
    one that should be called in preemptible context, the other does
    not have any requirement.

    The GICv2m driver is reworked to avoid executing preemptible code in
    non-preemptible context. This can be achieved by preparing the MSI
    mapping when allocating the MSI interrupt.

    Signed-off-by: Julien Grall
    Reviewed-by: Eric Auger
    Signed-off-by: Marc Zyngier

    Julien Grall
     

05 Apr, 2019

1 commit

  • Parsing entries in an ACPI table had assumed a generic header
    structure. There is no standard ACPI header, though, so less common
    layouts with different field sizes required custom parsers to go through
    their subtable entry list.

    Create the infrastructure for adding different table types so parsing
    the entries array may be more reused for all ACPI system tables and
    the common code doesn't need to be duplicated.

    Reviewed-by: Rafael J. Wysocki
    Acked-by: Jonathan Cameron
    Tested-by: Jonathan Cameron
    Signed-off-by: Keith Busch
    Tested-by: Brice Goglin
    Signed-off-by: Greg Kroah-Hartman

    Keith Busch
     

22 Jun, 2018

1 commit

  • On failing to allocate the required SPIs, the actual number of interrupts
    should be freed and not its log2 value.

    Fixes: de337ee30142 ("irqchip/gic-v2m: Add PCI Multi-MSI support")
    Signed-off-by: Marc Zyngier
    Signed-off-by: Thomas Gleixner
    Cc: Jason Cooper
    Cc: Alexandre Belloni
    Cc: Yang Yingliang
    Cc: Sumit Garg
    Link: https://lkml.kernel.org/r/20180622095254.5906-4-marc.zyngier@arm.com

    Marc Zyngier
     

13 Jun, 2018

1 commit

  • The kzalloc() function has a 2-factor argument form, kcalloc(). This
    patch replaces cases of:

    kzalloc(a * b, gfp)

    with:
    kcalloc(a * b, gfp)

    as well as handling cases of:

    kzalloc(a * b * c, gfp)

    with:

    kzalloc(array3_size(a, b, c), gfp)

    as it's slightly less ugly than:

    kzalloc_array(array_size(a, b), c, gfp)

    This does, however, attempt to ignore constant size factors like:

    kzalloc(4 * 1024, gfp)

    though any constants defined via macros get caught up in the conversion.

    Any factors with a sizeof() of "unsigned char", "char", and "u8" were
    dropped, since they're redundant.

    The Coccinelle script used for this was:

    // Fix redundant parens around sizeof().
    @@
    type TYPE;
    expression THING, E;
    @@

    (
    kzalloc(
    - (sizeof(TYPE)) * E
    + sizeof(TYPE) * E
    , ...)
    |
    kzalloc(
    - (sizeof(THING)) * E
    + sizeof(THING) * E
    , ...)
    )

    // Drop single-byte sizes and redundant parens.
    @@
    expression COUNT;
    typedef u8;
    typedef __u8;
    @@

    (
    kzalloc(
    - sizeof(u8) * (COUNT)
    + COUNT
    , ...)
    |
    kzalloc(
    - sizeof(__u8) * (COUNT)
    + COUNT
    , ...)
    |
    kzalloc(
    - sizeof(char) * (COUNT)
    + COUNT
    , ...)
    |
    kzalloc(
    - sizeof(unsigned char) * (COUNT)
    + COUNT
    , ...)
    |
    kzalloc(
    - sizeof(u8) * COUNT
    + COUNT
    , ...)
    |
    kzalloc(
    - sizeof(__u8) * COUNT
    + COUNT
    , ...)
    |
    kzalloc(
    - sizeof(char) * COUNT
    + COUNT
    , ...)
    |
    kzalloc(
    - sizeof(unsigned char) * COUNT
    + COUNT
    , ...)
    )

    // 2-factor product with sizeof(type/expression) and identifier or constant.
    @@
    type TYPE;
    expression THING;
    identifier COUNT_ID;
    constant COUNT_CONST;
    @@

    (
    - kzalloc
    + kcalloc
    (
    - sizeof(TYPE) * (COUNT_ID)
    + COUNT_ID, sizeof(TYPE)
    , ...)
    |
    - kzalloc
    + kcalloc
    (
    - sizeof(TYPE) * COUNT_ID
    + COUNT_ID, sizeof(TYPE)
    , ...)
    |
    - kzalloc
    + kcalloc
    (
    - sizeof(TYPE) * (COUNT_CONST)
    + COUNT_CONST, sizeof(TYPE)
    , ...)
    |
    - kzalloc
    + kcalloc
    (
    - sizeof(TYPE) * COUNT_CONST
    + COUNT_CONST, sizeof(TYPE)
    , ...)
    |
    - kzalloc
    + kcalloc
    (
    - sizeof(THING) * (COUNT_ID)
    + COUNT_ID, sizeof(THING)
    , ...)
    |
    - kzalloc
    + kcalloc
    (
    - sizeof(THING) * COUNT_ID
    + COUNT_ID, sizeof(THING)
    , ...)
    |
    - kzalloc
    + kcalloc
    (
    - sizeof(THING) * (COUNT_CONST)
    + COUNT_CONST, sizeof(THING)
    , ...)
    |
    - kzalloc
    + kcalloc
    (
    - sizeof(THING) * COUNT_CONST
    + COUNT_CONST, sizeof(THING)
    , ...)
    )

    // 2-factor product, only identifiers.
    @@
    identifier SIZE, COUNT;
    @@

    - kzalloc
    + kcalloc
    (
    - SIZE * COUNT
    + COUNT, SIZE
    , ...)

    // 3-factor product with 1 sizeof(type) or sizeof(expression), with
    // redundant parens removed.
    @@
    expression THING;
    identifier STRIDE, COUNT;
    type TYPE;
    @@

    (
    kzalloc(
    - sizeof(TYPE) * (COUNT) * (STRIDE)
    + array3_size(COUNT, STRIDE, sizeof(TYPE))
    , ...)
    |
    kzalloc(
    - sizeof(TYPE) * (COUNT) * STRIDE
    + array3_size(COUNT, STRIDE, sizeof(TYPE))
    , ...)
    |
    kzalloc(
    - sizeof(TYPE) * COUNT * (STRIDE)
    + array3_size(COUNT, STRIDE, sizeof(TYPE))
    , ...)
    |
    kzalloc(
    - sizeof(TYPE) * COUNT * STRIDE
    + array3_size(COUNT, STRIDE, sizeof(TYPE))
    , ...)
    |
    kzalloc(
    - sizeof(THING) * (COUNT) * (STRIDE)
    + array3_size(COUNT, STRIDE, sizeof(THING))
    , ...)
    |
    kzalloc(
    - sizeof(THING) * (COUNT) * STRIDE
    + array3_size(COUNT, STRIDE, sizeof(THING))
    , ...)
    |
    kzalloc(
    - sizeof(THING) * COUNT * (STRIDE)
    + array3_size(COUNT, STRIDE, sizeof(THING))
    , ...)
    |
    kzalloc(
    - sizeof(THING) * COUNT * STRIDE
    + array3_size(COUNT, STRIDE, sizeof(THING))
    , ...)
    )

    // 3-factor product with 2 sizeof(variable), with redundant parens removed.
    @@
    expression THING1, THING2;
    identifier COUNT;
    type TYPE1, TYPE2;
    @@

    (
    kzalloc(
    - sizeof(TYPE1) * sizeof(TYPE2) * COUNT
    + array3_size(COUNT, sizeof(TYPE1), sizeof(TYPE2))
    , ...)
    |
    kzalloc(
    - sizeof(TYPE1) * sizeof(THING2) * (COUNT)
    + array3_size(COUNT, sizeof(TYPE1), sizeof(TYPE2))
    , ...)
    |
    kzalloc(
    - sizeof(THING1) * sizeof(THING2) * COUNT
    + array3_size(COUNT, sizeof(THING1), sizeof(THING2))
    , ...)
    |
    kzalloc(
    - sizeof(THING1) * sizeof(THING2) * (COUNT)
    + array3_size(COUNT, sizeof(THING1), sizeof(THING2))
    , ...)
    |
    kzalloc(
    - sizeof(TYPE1) * sizeof(THING2) * COUNT
    + array3_size(COUNT, sizeof(TYPE1), sizeof(THING2))
    , ...)
    |
    kzalloc(
    - sizeof(TYPE1) * sizeof(THING2) * (COUNT)
    + array3_size(COUNT, sizeof(TYPE1), sizeof(THING2))
    , ...)
    )

    // 3-factor product, only identifiers, with redundant parens removed.
    @@
    identifier STRIDE, SIZE, COUNT;
    @@

    (
    kzalloc(
    - (COUNT) * STRIDE * SIZE
    + array3_size(COUNT, STRIDE, SIZE)
    , ...)
    |
    kzalloc(
    - COUNT * (STRIDE) * SIZE
    + array3_size(COUNT, STRIDE, SIZE)
    , ...)
    |
    kzalloc(
    - COUNT * STRIDE * (SIZE)
    + array3_size(COUNT, STRIDE, SIZE)
    , ...)
    |
    kzalloc(
    - (COUNT) * (STRIDE) * SIZE
    + array3_size(COUNT, STRIDE, SIZE)
    , ...)
    |
    kzalloc(
    - COUNT * (STRIDE) * (SIZE)
    + array3_size(COUNT, STRIDE, SIZE)
    , ...)
    |
    kzalloc(
    - (COUNT) * STRIDE * (SIZE)
    + array3_size(COUNT, STRIDE, SIZE)
    , ...)
    |
    kzalloc(
    - (COUNT) * (STRIDE) * (SIZE)
    + array3_size(COUNT, STRIDE, SIZE)
    , ...)
    |
    kzalloc(
    - COUNT * STRIDE * SIZE
    + array3_size(COUNT, STRIDE, SIZE)
    , ...)
    )

    // Any remaining multi-factor products, first at least 3-factor products,
    // when they're not all constants...
    @@
    expression E1, E2, E3;
    constant C1, C2, C3;
    @@

    (
    kzalloc(C1 * C2 * C3, ...)
    |
    kzalloc(
    - (E1) * E2 * E3
    + array3_size(E1, E2, E3)
    , ...)
    |
    kzalloc(
    - (E1) * (E2) * E3
    + array3_size(E1, E2, E3)
    , ...)
    |
    kzalloc(
    - (E1) * (E2) * (E3)
    + array3_size(E1, E2, E3)
    , ...)
    |
    kzalloc(
    - E1 * E2 * E3
    + array3_size(E1, E2, E3)
    , ...)
    )

    // And then all remaining 2 factors products when they're not all constants,
    // keeping sizeof() as the second factor argument.
    @@
    expression THING, E1, E2;
    type TYPE;
    constant C1, C2, C3;
    @@

    (
    kzalloc(sizeof(THING) * C2, ...)
    |
    kzalloc(sizeof(TYPE) * C2, ...)
    |
    kzalloc(C1 * C2 * C3, ...)
    |
    kzalloc(C1 * C2, ...)
    |
    - kzalloc
    + kcalloc
    (
    - sizeof(TYPE) * (E2)
    + E2, sizeof(TYPE)
    , ...)
    |
    - kzalloc
    + kcalloc
    (
    - sizeof(TYPE) * E2
    + E2, sizeof(TYPE)
    , ...)
    |
    - kzalloc
    + kcalloc
    (
    - sizeof(THING) * (E2)
    + E2, sizeof(THING)
    , ...)
    |
    - kzalloc
    + kcalloc
    (
    - sizeof(THING) * E2
    + E2, sizeof(THING)
    , ...)
    |
    - kzalloc
    + kcalloc
    (
    - (E1) * E2
    + E1, E2
    , ...)
    |
    - kzalloc
    + kcalloc
    (
    - (E1) * (E2)
    + E1, E2
    , ...)
    |
    - kzalloc
    + kcalloc
    (
    - E1 * E2
    + E1, E2
    , ...)
    )

    Signed-off-by: Kees Cook

    Kees Cook
     

16 Feb, 2018

1 commit

  • We'd never implemented Multi-MSI support with GICv2m, because
    it is weird and clunky, and you'd think people would rather use
    MSI-X.

    Turns out there is still plenty of devices out there that rely
    on Multi-MSI. Oh well, let's teach that trick to the v2m widget,
    it is not a big deal anyway.

    Signed-off-by: Marc Zyngier

    Marc Zyngier
     

23 Jun, 2017

1 commit


16 Sep, 2016

1 commit

  • When an MSI doorbell is located downstream of an IOMMU, attaching
    devices to a DMA ops domain and switching on translation leads to a rude
    shock when their attempt to write to the physical address returned by
    the irqchip driver faults (or worse, writes into some already-mapped
    buffer) and no interrupt is forthcoming.

    Address this by adding a hook for relevant irqchip drivers to call from
    their compose_msi_msg() callback, to swizzle the physical address with
    an appropriatly-mapped IOVA for any device attached to one of our DMA
    ops domains.

    Acked-by: Thomas Gleixner
    Acked-by: Marc Zyngier
    Signed-off-by: Robin Murphy
    Signed-off-by: Will Deacon

    Robin Murphy
     

13 Jun, 2016

1 commit

  • Fix the missing declaration of gicv2m_init() by including the
    file which defines it. Fixes the
    warning:

    drivers/irqchip/irq-gic-v2m.c:517:12: warning: symbol 'gicv2m_init' was not declared. Should it be static?

    Signed-off-by: Ben Dooks
    Link: https://lkml.kernel.org/r/1465408414-13698-1-git-send-email-ben.dooks@codethink.co.uk
    Signed-off-by: Jason Cooper

    Ben Dooks
     

11 May, 2016

1 commit

  • Alex Barba discovered Broadcom NS2 GICv2m
    implementation has an erratum where the MSI data needs to be the SPI
    number subtracted by an offset of 32, for the correct MSI interrupt
    to be triggered.

    Here we are adding the workaround based on readings from the MSI_IIDR
    register, which contains a value unique to Broadcom NS2 GICv2m

    Reported-by: Alex Barba
    Acked-by: Marc Zyngier
    Signed-off-by: Ray Jui
    Signed-off-by: Marc Zyngier

    Ray Jui
     

19 Feb, 2016

1 commit

  • Moving an SPI around doesn't require any extra work from the rest
    of the stack, and specially not for MSI-generated SPIs.

    It is then worth returning IRQ_SET_MASK_OK_DONE instead of
    IRQ_SET_MASK_OK, and simplify the other irqchips that rely on
    this behaviour (GICv2m and Marvell's ODMI controller).

    Signed-off-by: Marc Zyngier
    Acked-by: Thomas Petazzoni
    Link: https://lkml.kernel.org/r/1455894029-17270-1-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Jason Cooper

    Marc Zyngier
     

29 Dec, 2015

2 commits


21 Dec, 2015

2 commits

  • This patch introduces gicv2m_acpi_init(), which uses information
    in MADT GIC MSI frames structure to initialize GICv2m driver.
    It also exposes gicv2m_init() function, which simplifies callers
    to a single GICv2m init function.

    Reviewed-by: Marc Zyngier
    Tested-by: Duc Dang
    Acked-by: Rafael J. Wysocki
    Signed-off-by: Suravee Suthikulpanit
    Signed-off-by: Hanjun Guo
    Signed-off-by: Marc Zyngier

    Suravee Suthikulpanit
     
  • This patch replaces the struct device_node with struct fwnode_handle
    since this structure is common between DT and ACPI.

    It also refactors gicv2m_init_one() to prepare for ACPI support.
    The only functional change is removing the node name from pr_info.

    Reviewed-by: Marc Zyngier
    Signed-off-by: Suravee Suthikulpanit
    Signed-off-by: Marc Zyngier

    Suravee Suthikulpanit
     

16 Dec, 2015

1 commit


15 Oct, 2015

1 commit

  • The GICv2m driver is so far limited to a single MSI frame, but
    nothing prevents an implementation from having several of them.

    This patch expands the driver to enumerate all frames, keeping
    the first one as the canonical identifier for the MSI domains.

    Signed-off-by: Marc Zyngier
    Tested-by: Duc Dang
    Cc:
    Cc: Suravee Suthikulpanit
    Cc: Jason Cooper
    Link: http://lkml.kernel.org/r/1444822037-16983-3-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     

14 Oct, 2015

3 commits

  • As we continue to push of_node towards the outskirts of irq domains,
    let's start tackling the case of msi_create_irq_domain and its little
    friends.

    This has limited impact in both PCI/MSI, platform MSI, and a few
    drivers.

    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-17-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Marc Zyngier
     
  • Since we now have a generic data structure to express an
    interrupt specifier, convert all hierarchical irqchips that
    are OF based to use a fwnode_handle as part of their alloc
    and xlate (which becomes translate) callbacks.

    As most of these drivers have dependencies (they exchange IRQ
    specifiers), change them all in a single, massive patch...

    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-6-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
     

10 Oct, 2015

1 commit

  • APM X-Gene GICv2m implementation has an erratum where the
    MSI data needs to be the offset from the spi_start in order to
    trigger the correct MSI interrupt. This is different from the
    standard GICv2m implementation where the MSI data is the absolute
    value within the range from spi_start to (spi_start + num_spis)
    of each v2m frame.

    This patch reads MSI_IIDR register (present in all GICv2m
    implementations) to identify X-Gene GICv2m implementation and
    apply workaround to change the data portion of MSI vector.

    Reviewed-by: Marc Zyngier
    Signed-off-by: Duc Dang
    Signed-off-by: Marc Zyngier

    Duc Dang
     

15 Sep, 2015

1 commit

  • 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: Pavel Fedin
    Reviewed-by: Marc Zyngier
    Signed-off-by: Marc Zyngier
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: Stuart Yoder
    Cc: Jason Cooper
    Link: http://lkml.kernel.org/r/1442142873-20213-4-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Thomas Gleixner

    Pavel Fedin
     

30 Jul, 2015

2 commits

  • In order to support non-PCI MSI with GICv2m, add the minimal
    required entry points for the MSI domain, which is actually almost
    nothing (we just use the defaults provided by the core code).

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

    Marc Zyngier
     
  • GICv2m only uses the msi_controller structure as a way to match
    the host bridge with its MSI HW, and thus the msi_domain.

    But now that we can directly associate an msi_domain with a device,
    there is no use keeping this msi_controller around.

    Just remove all traces of msi_controller from the driver. Also
    tag the inner (non-PCI) domain with DOMAIN_BUS_NEXUS.

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

    Marc Zyngier
     

26 Nov, 2014

1 commit

  • ARM GICv2m specification extends GICv2 to support MSI(-X) with
    a new register frame. This allows a GICv2 based system to support
    MSI with minimal changes.

    Signed-off-by: Suravee Suthikulpanit
    [maz: converted the driver to use stacked irq domains,
    updated changelog]
    Signed-off-by: Marc Zyngier
    Link: https://lkml.kernel.org/r/1416941243-7181-2-git-send-email-marc.zyngier@arm.com
    Signed-off-by: Jason Cooper

    Suravee Suthikulpanit