[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [Xen-Devel] Enabling IRQ Crossbar (Secondary Interrupt Controller) Support

  • To: <xen-devel@xxxxxxxxxxxxx>
  • From: Brandon Perez <a0225893@xxxxxx>
  • Date: Mon, 20 Jul 2015 19:17:18 -0400
  • Delivery-date: Tue, 21 Jul 2015 06:08:32 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xen.org>

Hello All,

    You can find the relevant thread that outlines the issue at [1].

In short, the issue is as follows. On the TI DRA72 chip, there is a piece of hardware called the IRQ crossbar. Due to the large number of peripheral devices, not all devices can fit onto the SPI lines on the GIC. The crossbar maps peripheral devices to interrupt lines on the GIC.

The Linux kernel handles this by performing an on-demand mapping. Whenever a driver requires an interrupt, it requests it from the kernel. The Kernel keeps an internal map of the SPI lines, and checks for the next free line. It then sets up the appropriate crossbar register to map the given device to the SPI line, and marks that line as no longer free.

In the device tree, the "interrupts" property no longer contains the IRQ line corresponding to the device, but rather the crossbar input line corresponding to the device. This causes issues in Xen since it is expecting an IRQ line.

Ideally (in my opinion), the solution would be to mark these device tree entries (possibly with a different "interrupt-parent" property), so that Xen only maps the memory-mapped registers, and passes the interrupt on to Dom0. Dom0 would then handle the on-demand mapping of the devices. That way, Xen wouldn't need to repeat some fairly hardware-specific code that's already in the Kernel.

Below I've attached the patches of the changes I have made to Xen and the Linux kernel so far. For reference, here is my setup:
    - Hardware: TI DRA72 Chip, Arm Cortex A15
    - Xen:
        - Version: 4.6-unstable
        - Compiled from source, with some local changes
        - Branch: master
        - Commit: ecdae1cfaa7f6123decaa1b9d7205c3ff726b941
        - Repo URL: git://xenbits.xen.org/xen.git
    - Linux Kernel:
        - Version: 3.14
        - Compiled From source, with some local changes
        - Branch: android-3.14-6AL.1.0
        - Commit: 7b2f1133857414b96927c06f08ed6c440f5472e7
        - Repo URL: git://git.omapzoom.org/kernel/omap.git

I have additional patches for U-Boot which I can provide if needed, but they aren't directly relevant to this issue. I also have patches for a static crossbar mapping with Xen, which is the temporary work-around I'm currently working with.

[1] http://www.gossamer-threads.com/lists/xen/users/389509

Brandon Perez

Attachment: xen_0001_io_virt_remap.patch
Description: Text Data

Attachment: xen_0002_smc_call_passthrough.patch
Description: Text Data

Attachment: xen_0003_static_xbar_mapping_aware.patch
Description: Text Data

Attachment: linux_0001_dt_chosen_node.patch
Description: Text Data

Attachment: linux_0002_static_crossbar_support.patch
Description: Text Data

Attachment: linux_0003_dt_io_remap_nodes.patch
Description: Text Data

Attachment: linux_0004_static_crossbar_kconfig.patch
Description: Text Data

Attachment: linux_0005_uart_static_crossbar_mapping.patch
Description: Text Data

Attachment: linux_0006_new_interrupt_parent.patch
Description: Text Data

Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.