/* * iMX8MQ target - ecall-linux-demo * * Authors: * Manikandan * * This work is licensed under the terms of the GNU GPL, version 2. See * the COPYING file in the top-level directory. */ #include #include struct { struct jailhouse_cell_desc cell; __u64 cpus[1]; struct jailhouse_memory mem_regions[23]; struct jailhouse_irqchip irqchips[2]; struct jailhouse_pci_device pci_devices[4]; } __attribute__((packed)) config = { .cell = { .signature = JAILHOUSE_CELL_DESC_SIGNATURE, .revision = JAILHOUSE_CONFIG_REVISION, .name = "ecall-inmate-linux-demo", .flags = JAILHOUSE_CELL_PASSIVE_COMMREG, .cpu_set_size = sizeof(config.cpus), .num_memory_regions = ARRAY_SIZE(config.mem_regions), .num_irqchips = ARRAY_SIZE(config.irqchips), .num_pci_devices = ARRAY_SIZE(config.pci_devices), .vpci_irq_base = 51, /* Not include 32 base */ }, .cpus = { 0xc, }, .mem_regions = { /* IVSHMEM shared memory region (virtio-blk front) */ { .phys_start = 0xbfd00000, .virt_start = 0xbfd00000, .size = 0x1000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_ROOTSHARED, }, { .phys_start = 0xbfd01000, .virt_start = 0xbfd01000, .size = 0xdf000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_ROOTSHARED, }, { 0 }, { 0 }, /* IVSHMEM shared memory region (virtio-con front) */ { .phys_start = 0xbfde0000, .virt_start = 0xbfde0000, .size = 0x1000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_ROOTSHARED, }, { .phys_start = 0xbfde1000, .virt_start = 0xbfde1000, .size = 0xf000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_ROOTSHARED, }, { 0 }, { 0 }, /* IVHSMEM shared memory region for 00:00.0 */ { .phys_start = 0xbfdf0000, .virt_start = 0xbfdf0000, .size = 0x1000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_ROOTSHARED, }, { .phys_start = 0xbfdf1000, .virt_start = 0xbfdf1000, .size = 0x10000, //64kb //.size = 0x9000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_ROOTSHARED, }, { .phys_start = 0xbfe01000, .virt_start = 0xbfe01000, //.phys_start = 0xbfdfa000, //.virt_start = 0xbfdfa000, .size = 0x2000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_ROOTSHARED, }, { //.phys_start = 0xbfdfc000, //.virt_start = 0xbfdfc000, .phys_start = 0xbfe03000, .virt_start = 0xbfe03000, .size = 0x2000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_ROOTSHARED, }, { //.phys_start = 0xbfdfe000, //.virt_start = 0xbfdfe000, .phys_start = 0xbfe05000, .virt_start = 0xbfe05000, .size = 0x2000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_ROOTSHARED, }, /* IVSHMEM shared memory regions for 00:01.0 (networking) */ //JAILHOUSE_SHMEM_NET_REGIONS(0xbfe00000, 1), JAILHOUSE_SHMEM_NET_REGIONS(0xbfe05000, 1), /* UART1 earlycon */ { .phys_start = 0x30860000, .virt_start = 0x30860000, .size = 0x1000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_IO | JAILHOUSE_MEM_ROOTSHARED, }, /* UART2 */ { .phys_start = 0x30890000, .virt_start = 0x30890000, .size = 0x1000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_IO, }, /* SHDC1 */ { .phys_start = 0x30b40000, .virt_start = 0x30b40000, .size = 0x10000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_IO, }, /* RAM: Top at 4GB Space */ { .phys_start = 0xbff00000, .virt_start = 0, .size = 0x10000, /* 64KB */ .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_LOADABLE, }, /* RAM: Top at 4GB Space */ { .phys_start = 0xc0000000, .virt_start = 0xc0000000, .size = 0x3dc00000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA | JAILHOUSE_MEM_LOADABLE, }, /* communication region */ { .virt_start = 0x80000000, .size = 0x00001000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_COMM_REGION, }, }, .irqchips = { /* uart2/sdhc1 */ { .address = 0x38800000, .pin_base = 32, .pin_bitmap = { (1 << (27 + 32 - 32)) | (1 << (22 + 32 - 32)) }, }, /* IVSHMEM */ { .address = 0x38800000, .pin_base = 64, .pin_bitmap = { 0xf << (51 + 32 - 64) /* SPI 51 */ }, }, }, .pci_devices = { { .type = JAILHOUSE_PCI_TYPE_IVSHMEM, .domain = 2, .bdf = 2 << 3, .bar_mask = JAILHOUSE_IVSHMEM_BAR_MASK_INTX, .shmem_regions_start = 0, .shmem_dev_id = 1, .shmem_peers = 2, .shmem_protocol = JAILHOUSE_SHMEM_PROTO_VIRTIO_FRONT + VIRTIO_DEV_BLOCK, }, { .type = JAILHOUSE_PCI_TYPE_IVSHMEM, .domain = 2, .bdf = 3 << 3, .bar_mask = JAILHOUSE_IVSHMEM_BAR_MASK_INTX, .shmem_regions_start = 4, .shmem_dev_id = 1, .shmem_peers = 2, .shmem_protocol = JAILHOUSE_SHMEM_PROTO_VIRTIO_FRONT + VIRTIO_DEV_CONSOLE, }, { /* IVSHMEM 00:00.0 (demo) */ .type = JAILHOUSE_PCI_TYPE_IVSHMEM, .domain = 2, .bdf = 0 << 3, .bar_mask = JAILHOUSE_IVSHMEM_BAR_MASK_INTX, .shmem_regions_start = 8, .shmem_dev_id = 2, .shmem_peers = 3, .shmem_protocol = JAILHOUSE_SHMEM_PROTO_UNDEFINED, }, { /* IVSHMEM 00:01.0 (networking) */ .type = JAILHOUSE_PCI_TYPE_IVSHMEM, .domain = 2, .bdf = 1 << 3, .bar_mask = JAILHOUSE_IVSHMEM_BAR_MASK_INTX, .shmem_regions_start = 13, .shmem_dev_id = 1, .shmem_peers = 2, .shmem_protocol = JAILHOUSE_SHMEM_PROTO_VETH, }, }, };