]> xenbits.xensource.com Git - people/aperard/xen-arm.git/commitdiff
arndale: mapping irq to guest
authorAnthony PERARD <anthony.perard@citrix.com>
Wed, 16 Jan 2013 11:57:16 +0000 (11:57 +0000)
committerAnthony PERARD <anthony.perard@citrix.com>
Mon, 28 Jan 2013 15:55:19 +0000 (15:55 +0000)
xen/arch/arm/domain_build.c

index c775a1e8e15e8269745e1905dfb68155461dddd9..449b9c9270881489b978ebaf74c108cf00282a6f 100644 (file)
@@ -314,6 +314,7 @@ int construct_dom0(struct domain *d)
 {
     struct kernel_info kinfo = {};
     int rc;
+    int i;
 
     struct vcpu *v = d->vcpu[0];
     struct cpu_user_regs *regs = &v->arch.cpu_info->guest_cpu_user_regs;
@@ -353,17 +354,130 @@ int construct_dom0(struct domain *d)
 
     printk("Routing peripheral interrupts to guest\n");
     /* TODO Get from device tree */
-    gic_route_irq_to_guest(d, 34, "timer0");
-    /*gic_route_irq_to_guest(d, 37, "uart0"); -- XXX used by Xen*/
-    gic_route_irq_to_guest(d, 38, "uart1");
-    gic_route_irq_to_guest(d, 39, "uart2");
-    gic_route_irq_to_guest(d, 40, "uart3");
-    gic_route_irq_to_guest(d, 41, "mmc0-1");
-    gic_route_irq_to_guest(d, 42, "mmc0-2");
-    gic_route_irq_to_guest(d, 44, "keyboard");
-    gic_route_irq_to_guest(d, 45, "mouse");
-    gic_route_irq_to_guest(d, 46, "lcd");
-    gic_route_irq_to_guest(d, 47, "eth");
+
+
+    // Combined Interrupt
+    for (i = 0; i < 32; i++)
+    {
+        char name[] = "intc-xx";
+        name[sizeof(name)-2] = '0'+(i/10);
+        name[sizeof(name)-1] = '0'+(i%10);
+        gic_route_irq_to_guest(d, 32+i, name);
+    }
+    gic_route_irq_to_guest(d, 64, "eint16_31");
+    gic_route_irq_to_guest(d, 65, "mdma0_core");
+    gic_route_irq_to_guest(d, 66, "pdma0");
+    gic_route_irq_to_guest(d, 67, "pdma1");
+
+    gic_route_irq_to_guest(d, 68, "timer0");
+    gic_route_irq_to_guest(d, 69, "timer1");
+    gic_route_irq_to_guest(d, 70, "timer2");
+    gic_route_irq_to_guest(d, 71, "timer3");
+    gic_route_irq_to_guest(d, 72, "timer4");
+    /* gic_route_irq_to_guest(d, 73, "rtic"); */
+    gic_route_irq_to_guest(d, 74, "wdt");
+    gic_route_irq_to_guest(d, 75, "rtc_alarm");
+    gic_route_irq_to_guest(d, 76, "rtc_tic");
+    gic_route_irq_to_guest(d, 77, "gpio_rt");
+    gic_route_irq_to_guest(d, 78, "gpio_bl");
+    gic_route_irq_to_guest(d, 79, "gpio");
+    gic_route_irq_to_guest(d, 82, "gpio_c2c");
+
+    gic_route_irq_to_guest(d, 83, "uart0");
+    gic_route_irq_to_guest(d, 84, "uart1");
+    /*gic_route_irq_to_guest(d, 85, "uart2"); -- XXX used by Xen*/
+    gic_route_irq_to_guest(d, 86, "uart3");
+
+    gic_route_irq_to_guest(d, 87, "monocnt");
+
+    gic_route_irq_to_guest(d, 88, "i2c0");
+    gic_route_irq_to_guest(d, 89, "i2c1");
+    gic_route_irq_to_guest(d, 90, "i2c2");
+    gic_route_irq_to_guest(d, 91, "i2c3");
+    gic_route_irq_to_guest(d, 92, "i2c4");
+    gic_route_irq_to_guest(d, 93, "i2c5");
+    gic_route_irq_to_guest(d, 94, "i2c6");
+    gic_route_irq_to_guest(d, 95, "i2c7");
+    gic_route_irq_to_guest(d, 96, "i2c hdmi");
+
+    gic_route_irq_to_guest(d, 97, "tmu");
+
+    gic_route_irq_to_guest(d, 98, "cpu_nfiq0");
+    gic_route_irq_to_guest(d, 99, "cpu_nfiq1");
+
+    gic_route_irq_to_guest(d, 100, "spi0");
+    gic_route_irq_to_guest(d, 101, "spi1");
+    gic_route_irq_to_guest(d, 102, "spi2");
+
+    gic_route_irq_to_guest(d, 103, "usb-host");
+    gic_route_irq_to_guest(d, 104, "usb-drd");
+
+    gic_route_irq_to_guest(d, 105, "mipi_hsi");
+    gic_route_irq_to_guest(d, 106, "usbotg");
+
+    gic_route_irq_to_guest(d, 107, "sdmmc0");
+    /* gic_route_irq_to_guest(d, 108, "sdmmc1"); */
+    gic_route_irq_to_guest(d, 109, "sdmmc2");
+    /* gic_route_irq_to_guest(d, 110, "sdmmc3"); */
+
+    gic_route_irq_to_guest(d, 111, "mipi_csi_a");
+    gic_route_irq_to_guest(d, 112, "mipi_csi_b");
+
+    gic_route_irq_to_guest(d, 113, "efnfcon_dma_abort");
+    gic_route_irq_to_guest(d, 114, "mipi_dsi_4lane");
+    gic_route_irq_to_guest(d, 115, "wdt_iop");
+    gic_route_irq_to_guest(d, 116, "rotator");
+
+    for (i = 0; i <= 3; i++) {
+        char name[] = "gsclx";
+        name[sizeof(name)-1] = '0'+(i%10);
+        gic_route_irq_to_guest(d, 117+i, name);
+    }
+
+    gic_route_irq_to_guest(d, 121, "jpeg");
+    gic_route_irq_to_guest(d, 122, "efnfcon_dma");
+    gic_route_irq_to_guest(d, 123, "g2d");
+    gic_route_irq_to_guest(d, 124, "efnfcon_0");
+    gic_route_irq_to_guest(d, 125, "efnfcon_1");
+    // mixer, hdmi
+    gic_route_irq_to_guest(d, 128, "mfc");
+    // audio_ss
+    for (i = 0; i <= 2; i++) {
+        char name[] = "i2sx";
+        name[sizeof(name)-1] = '0'+(i%10);
+        gic_route_irq_to_guest(d, 130+i, name);
+    }
+    // 133 ac97
+    for (i = 0; i <= 2; i++) {
+        char name[] = "pcmx";
+        name[sizeof(name)-1] = '0'+(i%10);
+        gic_route_irq_to_guest(d, 134+i, name);
+    }
+    // spdif
+    gic_route_irq_to_guest(d, 138, "adc0");
+    // reserved
+    /* gic_route_irq_to_guest(d, 140, "sataphy"); */
+    /* gic_route_irq_to_guest(d, 141, "satapmereq"); */
+    gic_route_irq_to_guest(d, 142, "cam_c");
+    gic_route_irq_to_guest(d, 143, "pmu");
+    gic_route_irq_to_guest(d, 144, "intfeedctrl_sss");
+    gic_route_irq_to_guest(d, 145, "dp1_1");
+    gic_route_irq_to_guest(d, 146, "cec");
+    /* gic_route_irq_to_guest(d, 147, "sata"); */
+    // reserved
+    gic_route_irq_to_guest(d, 149, "g3d_irqgpu");
+    gic_route_irq_to_guest(d, 150, "g3d_irqjob");
+    gic_route_irq_to_guest(d, 151, "g3d_irqmmu");
+
+    gic_route_irq_to_guest(d, 152, "mct-l0");
+    gic_route_irq_to_guest(d, 153, "mct-l1");
+    // reserved
+    gic_route_irq_to_guest(d, 156, "mdma1");
+
+    gic_route_irq_to_guest(d, 157, "cam_a");
+    gic_route_irq_to_guest(d, 158, "cam_b");
+
+    gic_route_irq_to_guest(d, 159, "rp_timer");
 
     /* Enable second stage translation */
     WRITE_CP32(READ_CP32(HCR) | HCR_VM, HCR); isb();