2 * Jailhouse, a Linux-based partitioning hypervisor
4 * Copyright (c) Siemens AG, 2014
5 * Copyright (c) Valentine Sinitsyn, 2014
7 * This work is licensed under the terms of the GNU GPL, version 2. See
8 * the COPYING file in the top-level directory.
10 * Configuration for Gigabyte Technology Co., Ltd. GA-F2A88XM-HD3 Rev. 3.0
11 * board with AMD A10-7800 APU and 1G RAM.
13 * Created with 'jailhouse config create f2a88xm-hd3.c' and adjusted
14 * by Valentine Sinitsyn <valentine.sinitsyn@gmail.com>.
16 * NOTE: This config expects the following to be appended to your kernel cmdline
17 * "memmap=0x4200000$0x3b000000"
20 #include <linux/types.h>
21 #include <jailhouse/cell-config.h>
23 #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
26 struct jailhouse_system header;
28 struct jailhouse_memory mem_regions[35];
29 struct jailhouse_irqchip irqchips[2];
30 __u8 pio_bitmap[0x2000];
31 struct jailhouse_pci_device pci_devices[26];
32 struct jailhouse_pci_capability pci_caps[27];
33 } __attribute__((packed)) config = {
35 .signature = JAILHOUSE_SYSTEM_SIGNATURE,
36 .hypervisor_memory = {
37 .phys_start = 0x3b000000,
40 .platform_info.x86 = {
41 .mmconfig_base = 0xe0000000,
42 .mmconfig_end_bus = 0xff,
43 .pm_timer_address = 0x808,
49 .interrupt_limit = 256,
51 .name = "F2A88XM-HD3",
52 .cpu_set_size = sizeof(config.cpus),
53 .num_memory_regions = ARRAY_SIZE(config.mem_regions),
54 .num_irqchips = ARRAY_SIZE(config.irqchips),
55 .pio_bitmap_size = ARRAY_SIZE(config.pio_bitmap),
56 .num_pci_devices = ARRAY_SIZE(config.pci_devices),
57 .num_pci_caps = ARRAY_SIZE(config.pci_caps),
66 /* MemRegion: 00000000-0009e7ff : System RAM */
71 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
72 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
74 /* MemRegion: 000a0000-000bffff : PCI Bus 0000:00 */
76 .phys_start = 0xa0000,
77 .virt_start = 0xa0000,
79 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
81 /* MemRegion: 000c0000-000cf5ff : Video ROM */
83 .phys_start = 0xc0000,
84 .virt_start = 0xc0000,
86 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
88 /* MemRegion: 000e0000-000fffff : System ROM */
90 .phys_start = 0xe0000,
91 .virt_start = 0xe0000,
93 .flags = JAILHOUSE_MEM_READ,
95 /* MemRegion: 00100000-00ffffff : System RAM */
97 .phys_start = 0x100000,
98 .virt_start = 0x100000,
100 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
101 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
103 /* MemRegion: 01000000-01ffffff : Kernel */
105 .phys_start = 0x1000000,
106 .virt_start = 0x1000000,
108 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
109 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
111 /* MemRegion: 02000000-3affffff : System RAM */
113 .phys_start = 0x2000000,
114 .virt_start = 0x2000000,
116 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
117 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
119 /* MemRegion: 3f200000-6b8ecfff : System RAM */
121 .phys_start = 0x3f200000,
122 .virt_start = 0x3f200000,
124 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
125 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
127 /* MemRegion: 6b91d000-6bbdffff : System RAM */
129 .phys_start = 0x6b91d000,
130 .virt_start = 0x6b91d000,
132 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
133 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
135 /* MemRegion: 6bbe0000-6bcadfff : ACPI Non-volatile Storage */
137 .phys_start = 0x6bbe0000,
138 .virt_start = 0x6bbe0000,
140 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
142 /* MemRegion: 6d1c9000-6d1c9fff : System RAM */
144 .phys_start = 0x6d1c9000,
145 .virt_start = 0x6d1c9000,
147 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
148 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
150 /* MemRegion: 6d1ca000-6d3cffff : ACPI Non-volatile Storage */
152 .phys_start = 0x6d1ca000,
153 .virt_start = 0x6d1ca000,
155 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
157 /* MemRegion: 6d3d0000-6d850fff : System RAM */
159 .phys_start = 0x6d3d0000,
160 .virt_start = 0x6d3d0000,
162 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
163 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
165 /* MemRegion: 6dfe2000-6dffffff : System RAM */
167 .phys_start = 0x6dfe2000,
168 .virt_start = 0x6dfe2000,
170 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
171 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
173 /* MemRegion: 6e000000-6fffffff : RAM buffer */
175 .phys_start = 0x6e000000,
176 .virt_start = 0x6e000000,
178 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
179 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
181 /* MemRegion: c0000000-cfffffff : 0000:00:01.0 */
183 .phys_start = 0xc0000000,
184 .virt_start = 0xc0000000,
186 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
188 /* MemRegion: d0000000-d07fffff : 0000:00:01.0 */
190 .phys_start = 0xd0000000,
191 .virt_start = 0xd0000000,
193 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
195 /* MemRegion: d0801000-d0803fff : r8169 */
197 .phys_start = 0xd0801000,
198 .virt_start = 0xd0801000,
200 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
202 /* MemRegion: fea00000-fea00fff : r8169 */
204 .phys_start = 0xfea00000,
205 .virt_start = 0xfea00000,
207 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
209 /* MemRegion: feb00000-feb3ffff : 0000:00:01.0 */
211 .phys_start = 0xfeb00000,
212 .virt_start = 0xfeb00000,
214 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
216 /* MemRegion: feb40000-feb5ffff : 0000:00:01.0 */
218 .phys_start = 0xfeb40000,
219 .virt_start = 0xfeb40000,
221 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
223 /* MemRegion: feb60000-feb63fff : ICH HD audio */
225 .phys_start = 0xfeb60000,
226 .virt_start = 0xfeb60000,
228 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
230 /* MemRegion: feb64000-feb67fff : ICH HD audio */
232 .phys_start = 0xfeb64000,
233 .virt_start = 0xfeb64000,
235 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
237 /* MemRegion: feb68000-feb68fff : xhci_hcd */
239 .phys_start = 0xfeb68000,
240 .virt_start = 0xfeb68000,
242 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
244 /* MemRegion: feb6a000-feb6afff : xhci_hcd */
246 .phys_start = 0xfeb6a000,
247 .virt_start = 0xfeb6a000,
249 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
251 /* MemRegion: feb6c000-feb6cfff : ohci_hcd */
253 .phys_start = 0xfeb6c000,
254 .virt_start = 0xfeb6c000,
256 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
258 /* MemRegion: feb6d000-feb6d0ff : ehci_hcd */
260 .phys_start = 0xfeb6d000,
261 .virt_start = 0xfeb6d000,
263 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
265 /* MemRegion: feb6e000-feb6efff : ohci_hcd */
267 .phys_start = 0xfeb6e000,
268 .virt_start = 0xfeb6e000,
270 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
272 /* MemRegion: feb6f000-feb6f0ff : ehci_hcd */
274 .phys_start = 0xfeb6f000,
275 .virt_start = 0xfeb6f000,
277 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
279 /* MemRegion: feb70000-feb70fff : ohci_hcd */
281 .phys_start = 0xfeb70000,
282 .virt_start = 0xfeb70000,
284 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
286 /* MemRegion: feb71000-feb717ff : ahci */
288 .phys_start = 0xfeb71000,
289 .virt_start = 0xfeb71000,
291 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
293 /* MemRegion: feb80000-febfffff : pnp 00:02 */
295 .phys_start = 0xfeb80000,
296 .virt_start = 0xfeb80000,
298 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
300 /* MemRegion: fed00000-fed003ff : HPET 0 */
302 .phys_start = 0xfed00000,
303 .virt_start = 0xfed00000,
305 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
307 /* MemRegion: fed61000-fed70fff : pnp 00:09 */
309 .phys_start = 0xfed61000,
310 .virt_start = 0xfed61000,
312 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
314 /* MemRegion: 3f000000-3f1fffff : JAILHOUSE Inmate Memory */
316 .phys_start = 0x3f000000,
317 .virt_start = 0x3f000000,
319 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
324 /* IOAPIC 0, GSI base 0 */
326 .address = 0xfec00000,
328 .pin_bitmap = 0xffffff,
330 /* IOAPIC 1, GSI base 24 */
332 .address = 0xfec01000,
334 .pin_bitmap = 0xffffff,
339 [ 0/8 ... 0x1f/8] = -1,
340 [ 0x20/8 ... 0x27/8] = 0xfc, /* HACK: PIC */
341 [ 0x28/8 ... 0x3f/8] = -1,
342 [ 0x40/8 ... 0x47/8] = 0xf0, /* PIT */
343 [ 0x48/8 ... 0x5f/8] = -1,
344 [ 0x60/8 ... 0x67/8] = 0xec, /* HACK: NMI status/control */
345 [ 0x68/8 ... 0x6f/8] = -1,
346 [ 0x70/8 ... 0x77/8] = 0xfc, /* RTC */
347 [ 0x78/8 ... 0x7f/8] = -1,
348 [ 0x80/8 ... 0x87/8] = 0xfe, /* Port 80 (delays) */
349 [ 0x88/8 ... 0x3af/8] = -1,
350 [ 0x3b0/8 ... 0x3df/8] = 0x00, /* VGA */
351 [ 0x3e0/8 ... 0xcf7/8] = 0, /* HACK: PCI bus */
352 [ 0xcf8/8 ... 0xcff/8] = -1,
353 [ 0xd00/8 ... 0xffff/8] = 0, /* HACK: PCI bus */
357 /* PCIDevice: 00:00.0 */
359 .type = JAILHOUSE_PCI_TYPE_DEVICE,
364 .num_msi_vectors = 0,
366 .num_msix_vectors = 0,
367 .msix_region_size = 0x0,
370 /* PCIDevice: 00:01.0 */
372 .type = JAILHOUSE_PCI_TYPE_DEVICE,
378 .num_msi_vectors = 1,
380 .num_msix_vectors = 0,
381 .msix_region_size = 0x0,
384 /* PCIDevice: 00:01.1 */
386 .type = JAILHOUSE_PCI_TYPE_DEVICE,
392 .num_msi_vectors = 1,
394 .num_msix_vectors = 0,
395 .msix_region_size = 0x0,
398 /* PCIDevice: 00:02.0 */
400 .type = JAILHOUSE_PCI_TYPE_DEVICE,
406 .num_msi_vectors = 0,
408 .num_msix_vectors = 0,
409 .msix_region_size = 0x0,
412 /* PCIDevice: 00:03.0 */
414 .type = JAILHOUSE_PCI_TYPE_DEVICE,
420 .num_msi_vectors = 0,
422 .num_msix_vectors = 0,
423 .msix_region_size = 0x0,
426 /* PCIDevice: 00:03.1 */
428 .type = JAILHOUSE_PCI_TYPE_BRIDGE,
434 .num_msi_vectors = 1,
436 .num_msix_vectors = 0,
437 .msix_region_size = 0x0,
440 /* PCIDevice: 00:04.0 */
442 .type = JAILHOUSE_PCI_TYPE_DEVICE,
448 .num_msi_vectors = 0,
450 .num_msix_vectors = 0,
451 .msix_region_size = 0x0,
454 /* PCIDevice: 00:10.0 */
456 .type = JAILHOUSE_PCI_TYPE_DEVICE,
462 .num_msi_vectors = 8,
464 .num_msix_vectors = 8,
465 .msix_region_size = 0x1000,
466 .msix_address = 0xfeb6b000,
468 /* PCIDevice: 00:10.1 */
470 .type = JAILHOUSE_PCI_TYPE_DEVICE,
476 .num_msi_vectors = 8,
478 .num_msix_vectors = 8,
479 .msix_region_size = 0x1000,
480 .msix_address = 0xfeb69000,
482 /* PCIDevice: 00:11.0 */
484 .type = JAILHOUSE_PCI_TYPE_DEVICE,
490 .num_msi_vectors = 8,
492 .num_msix_vectors = 0,
493 .msix_region_size = 0x0,
496 /* PCIDevice: 00:12.0 */
498 .type = JAILHOUSE_PCI_TYPE_DEVICE,
504 .num_msi_vectors = 0,
506 .num_msix_vectors = 0,
507 .msix_region_size = 0x0,
510 /* PCIDevice: 00:12.2 */
512 .type = JAILHOUSE_PCI_TYPE_DEVICE,
518 .num_msi_vectors = 0,
520 .num_msix_vectors = 0,
521 .msix_region_size = 0x0,
524 /* PCIDevice: 00:13.0 */
526 .type = JAILHOUSE_PCI_TYPE_DEVICE,
532 .num_msi_vectors = 0,
534 .num_msix_vectors = 0,
535 .msix_region_size = 0x0,
538 /* PCIDevice: 00:13.2 */
540 .type = JAILHOUSE_PCI_TYPE_DEVICE,
546 .num_msi_vectors = 0,
548 .num_msix_vectors = 0,
549 .msix_region_size = 0x0,
552 /* PCIDevice: 00:14.0 */
554 .type = JAILHOUSE_PCI_TYPE_DEVICE,
560 .num_msi_vectors = 0,
562 .num_msix_vectors = 0,
563 .msix_region_size = 0x0,
566 /* PCIDevice: 00:14.2 */
568 .type = JAILHOUSE_PCI_TYPE_DEVICE,
574 .num_msi_vectors = 0,
576 .num_msix_vectors = 0,
577 .msix_region_size = 0x0,
580 /* PCIDevice: 00:14.3 */
582 .type = JAILHOUSE_PCI_TYPE_DEVICE,
588 .num_msi_vectors = 0,
590 .num_msix_vectors = 0,
591 .msix_region_size = 0x0,
594 /* PCIDevice: 00:14.4 */
596 .type = JAILHOUSE_PCI_TYPE_BRIDGE,
602 .num_msi_vectors = 0,
604 .num_msix_vectors = 0,
605 .msix_region_size = 0x0,
608 /* PCIDevice: 00:14.5 */
610 .type = JAILHOUSE_PCI_TYPE_DEVICE,
616 .num_msi_vectors = 0,
618 .num_msix_vectors = 0,
619 .msix_region_size = 0x0,
622 /* PCIDevice: 00:18.0 */
624 .type = JAILHOUSE_PCI_TYPE_DEVICE,
630 .num_msi_vectors = 0,
632 .num_msix_vectors = 0,
633 .msix_region_size = 0x0,
636 /* PCIDevice: 00:18.1 */
638 .type = JAILHOUSE_PCI_TYPE_DEVICE,
644 .num_msi_vectors = 0,
646 .num_msix_vectors = 0,
647 .msix_region_size = 0x0,
650 /* PCIDevice: 00:18.2 */
652 .type = JAILHOUSE_PCI_TYPE_DEVICE,
658 .num_msi_vectors = 0,
660 .num_msix_vectors = 0,
661 .msix_region_size = 0x0,
664 /* PCIDevice: 00:18.3 */
666 .type = JAILHOUSE_PCI_TYPE_DEVICE,
672 .num_msi_vectors = 0,
674 .num_msix_vectors = 0,
675 .msix_region_size = 0x0,
678 /* PCIDevice: 00:18.4 */
680 .type = JAILHOUSE_PCI_TYPE_DEVICE,
686 .num_msi_vectors = 0,
688 .num_msix_vectors = 0,
689 .msix_region_size = 0x0,
692 /* PCIDevice: 00:18.5 */
694 .type = JAILHOUSE_PCI_TYPE_DEVICE,
700 .num_msi_vectors = 0,
702 .num_msix_vectors = 0,
703 .msix_region_size = 0x0,
706 /* PCIDevice: 01:00.0 */
708 .type = JAILHOUSE_PCI_TYPE_DEVICE,
714 .num_msi_vectors = 1,
716 .num_msix_vectors = 4,
717 .msix_region_size = 0x1000,
718 .msix_address = 0xd0800000,
723 /* PCIDevice: 00:00.2 */
734 .flags = JAILHOUSE_PCICAPS_WRITE,
742 /* PCIDevice: 00:01.0 */
743 /* PCIDevice: 00:01.1 */
754 .flags = JAILHOUSE_PCICAPS_WRITE,
766 .flags = JAILHOUSE_PCICAPS_WRITE,
768 /* PCIDevice: 00:03.1 */
773 .flags = JAILHOUSE_PCICAPS_WRITE,
785 .flags = JAILHOUSE_PCICAPS_WRITE,
799 /* PCIDevice: 00:10.0 */
800 /* PCIDevice: 00:10.1 */
805 .flags = JAILHOUSE_PCICAPS_WRITE,
811 .flags = JAILHOUSE_PCICAPS_WRITE,
817 .flags = JAILHOUSE_PCICAPS_WRITE,
825 /* PCIDevice: 00:11.0 */
830 .flags = JAILHOUSE_PCICAPS_WRITE,
838 /* PCIDevice: 00:12.2 */
839 /* PCIDevice: 00:13.2 */
844 .flags = JAILHOUSE_PCICAPS_WRITE,
852 /* PCIDevice: 00:14.2 */
857 .flags = JAILHOUSE_PCICAPS_WRITE,
859 /* PCIDevice: 00:18.3 */
866 /* PCIDevice: 01:00.0 */
871 .flags = JAILHOUSE_PCICAPS_WRITE,
877 .flags = JAILHOUSE_PCICAPS_WRITE,
889 .flags = JAILHOUSE_PCICAPS_WRITE,