{
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;
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();