02 Oct, 2018

5 commits

  • So far the ICU only handled NSR interrupts through GICP. An SEI driver
    provides an MSI domain through which it is possible to raise SEI, so
    let's add SEI support to the ICU driver.

    Handle the NSR probe function in a more generic way to support other
    type of interrupts.

    Each interrupt domain is a tree domain to avoid allocation the 207
    entries each time.

    Signed-off-by: Miquel Raynal
    Signed-off-by: Marc Zyngier

    Miquel Raynal
     
  • The ICU can handle several type of interrupt, each of them being handled
    differently on AP side. On CP side, the ICU should be able to make the
    distinction between each interrupt group by pointing to the right parent.

    This is done through the introduction of new bindings, presenting the ICU
    node as the parent of multiple ICU sub-nodes, each of them being an
    interrupt type with a different interrupt parent. ICU interrupt 'clients'
    now directly point to the right sub-node, avoiding the need for the extra
    ICU_GRP_* parameter.

    ICU subnodes are probed automatically with devm_platform_populate(). If
    the node as no child, the probe function for NSRs will still be called
    'manually' in order to preserve backward compatibility with DT using the
    old binding.

    Signed-off-by: Miquel Raynal
    Signed-off-by: Marc Zyngier

    Miquel Raynal
     
  • NSR (non-secure interrupts) are handled in the ICU driver like if there
    was only this type of interrupt in the ICU. Change this behavior to
    prepare the introduction of SEI (System Error Interrupts) support by
    moving the NSR code in a separate function. This is done under the form
    of a 'probe' function to ease future migration to NSR/SEI being platform
    devices part of the ICU. The 'icu' structure is passed as driver data
    and not as a parameter for the same reason.

    Reviewed-by: Thomas Petazzoni
    Signed-off-by: Miquel Raynal
    Signed-off-by: Marc Zyngier

    Miquel Raynal
     
  • Rewrite a small section to clarify the reset operation of interrupts
    already configured by ATF that we want to handle in the driver. This
    will simplify the introduction of System Error Interrupts support.

    Reviewed-by: Thomas Petazzoni
    Signed-off-by: Miquel Raynal
    Signed-off-by: Marc Zyngier

    Miquel Raynal
     
  • The irq_domain structure has an host_data pointer that just stores
    private data. It is meant to not be touched by the IRQ core. However,
    when it comes to MSI, the MSI layer adds its own private data there
    with a structure that also has a host_data pointer.

    Because this IRQ domain is an MSI domain, to access private data we
    should do a d->host_data->host_data, also wrapped as
    'platform_msi_get_host_data()'.

    This bug was lying there silently because the 'icu' structure retrieved
    this way was just called by dev_err(), only producing a
    '(NULL device *):' output on the console.

    Reviewed-by: Thomas Petazzoni
    Signed-off-by: Miquel Raynal
    Signed-off-by: Marc Zyngier

    Miquel Raynal
     

13 May, 2018

1 commit

  • The ICU and GICP drivers are using an ugly side-band mechanism to
    find out about the "clear" doorbell when using level interrupts.

    Let's convert it to level-triggered MSIs, which result in a nice
    cleanup.

    Signed-off-by: Marc Zyngier
    Signed-off-by: Thomas Gleixner
    Tested-by: Miquel Raynal
    Cc: Rob Herring
    Cc: Jason Cooper
    Cc: Ard Biesheuvel
    Cc: Srinivas Kandagatla
    Cc: Thomas Petazzoni
    Link: https://lkml.kernel.org/r/20180508121438.11301-4-marc.zyngier@arm.com

    Marc Zyngier
     

23 Jun, 2017

1 commit

  • The Marvell ICU unit is found in the CP110 block of the Marvell Armada
    7K and 8K SoCs. It collects the wired interrupts of the devices located
    in the CP110 and turns them into SPI interrupts in the GIC located in
    the AP806 side of the SoC, by using a memory transaction.

    Until now, the ICU was configured in a static fashion by the firmware,
    and Linux was relying on this static configuration. By having Linux
    configure the ICU, we are more flexible, and we can allocate dynamically
    the GIC SPI interrupts only for devices that are actually in use.

    The driver was initially written by Hanna Hawa .

    Reviewed-by: Marc Zyngier
    Signed-off-by: Thomas Petazzoni
    Signed-off-by: Marc Zyngier

    Thomas Petazzoni