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,
43 .platform_info.x86 = {
44 .mmconfig_base = 0xe0000000,
45 .mmconfig_end_bus = 0xff,
46 .pm_timer_address = 0x808,
54 .amd_features = 0x80048824,
59 .interrupt_limit = 256,
61 .name = "F2A88XM-HD3",
62 .cpu_set_size = sizeof(config.cpus),
63 .num_memory_regions = ARRAY_SIZE(config.mem_regions),
64 .num_irqchips = ARRAY_SIZE(config.irqchips),
65 .pio_bitmap_size = ARRAY_SIZE(config.pio_bitmap),
66 .num_pci_devices = ARRAY_SIZE(config.pci_devices),
67 .num_pci_caps = ARRAY_SIZE(config.pci_caps),
76 /* MemRegion: 00000000-0009e7ff : System RAM */
81 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
82 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
84 /* MemRegion: 000a0000-000bffff : PCI Bus 0000:00 */
86 .phys_start = 0xa0000,
87 .virt_start = 0xa0000,
89 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
91 /* MemRegion: 000c0000-000cf5ff : Video ROM */
93 .phys_start = 0xc0000,
94 .virt_start = 0xc0000,
96 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
98 /* MemRegion: 000e0000-000fffff : System ROM */
100 .phys_start = 0xe0000,
101 .virt_start = 0xe0000,
103 .flags = JAILHOUSE_MEM_READ,
105 /* MemRegion: 00100000-00ffffff : System RAM */
107 .phys_start = 0x100000,
108 .virt_start = 0x100000,
110 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
111 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
113 /* MemRegion: 01000000-01ffffff : Kernel */
115 .phys_start = 0x1000000,
116 .virt_start = 0x1000000,
118 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
119 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
121 /* MemRegion: 02000000-3affffff : System RAM */
123 .phys_start = 0x2000000,
124 .virt_start = 0x2000000,
126 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
127 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
129 /* MemRegion: 3f200000-6b8ecfff : System RAM */
131 .phys_start = 0x3f200000,
132 .virt_start = 0x3f200000,
134 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
135 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
137 /* MemRegion: 6b91d000-6bbdffff : System RAM */
139 .phys_start = 0x6b91d000,
140 .virt_start = 0x6b91d000,
142 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
143 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
145 /* MemRegion: 6bbe0000-6bcadfff : ACPI Non-volatile Storage */
147 .phys_start = 0x6bbe0000,
148 .virt_start = 0x6bbe0000,
150 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
152 /* MemRegion: 6d1c9000-6d1c9fff : System RAM */
154 .phys_start = 0x6d1c9000,
155 .virt_start = 0x6d1c9000,
157 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
158 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
160 /* MemRegion: 6d1ca000-6d3cffff : ACPI Non-volatile Storage */
162 .phys_start = 0x6d1ca000,
163 .virt_start = 0x6d1ca000,
165 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
167 /* MemRegion: 6d3d0000-6d850fff : System RAM */
169 .phys_start = 0x6d3d0000,
170 .virt_start = 0x6d3d0000,
172 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
173 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
175 /* MemRegion: 6dfe2000-6dffffff : System RAM */
177 .phys_start = 0x6dfe2000,
178 .virt_start = 0x6dfe2000,
180 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
181 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
183 /* MemRegion: 6e000000-6fffffff : RAM buffer */
185 .phys_start = 0x6e000000,
186 .virt_start = 0x6e000000,
188 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
189 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
191 /* MemRegion: c0000000-cfffffff : 0000:00:01.0 */
193 .phys_start = 0xc0000000,
194 .virt_start = 0xc0000000,
196 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
198 /* MemRegion: d0000000-d07fffff : 0000:00:01.0 */
200 .phys_start = 0xd0000000,
201 .virt_start = 0xd0000000,
203 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
205 /* MemRegion: d0801000-d0803fff : r8169 */
207 .phys_start = 0xd0801000,
208 .virt_start = 0xd0801000,
210 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
212 /* MemRegion: fea00000-fea00fff : r8169 */
214 .phys_start = 0xfea00000,
215 .virt_start = 0xfea00000,
217 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
219 /* MemRegion: feb00000-feb3ffff : 0000:00:01.0 */
221 .phys_start = 0xfeb00000,
222 .virt_start = 0xfeb00000,
224 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
226 /* MemRegion: feb40000-feb5ffff : 0000:00:01.0 */
228 .phys_start = 0xfeb40000,
229 .virt_start = 0xfeb40000,
231 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
233 /* MemRegion: feb60000-feb63fff : ICH HD audio */
235 .phys_start = 0xfeb60000,
236 .virt_start = 0xfeb60000,
238 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
240 /* MemRegion: feb64000-feb67fff : ICH HD audio */
242 .phys_start = 0xfeb64000,
243 .virt_start = 0xfeb64000,
245 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
247 /* MemRegion: feb68000-feb68fff : xhci_hcd */
249 .phys_start = 0xfeb68000,
250 .virt_start = 0xfeb68000,
252 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
254 /* MemRegion: feb6a000-feb6afff : xhci_hcd */
256 .phys_start = 0xfeb6a000,
257 .virt_start = 0xfeb6a000,
259 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
261 /* MemRegion: feb6c000-feb6cfff : ohci_hcd */
263 .phys_start = 0xfeb6c000,
264 .virt_start = 0xfeb6c000,
266 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
268 /* MemRegion: feb6d000-feb6d0ff : ehci_hcd */
270 .phys_start = 0xfeb6d000,
271 .virt_start = 0xfeb6d000,
273 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
275 /* MemRegion: feb6e000-feb6efff : ohci_hcd */
277 .phys_start = 0xfeb6e000,
278 .virt_start = 0xfeb6e000,
280 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
282 /* MemRegion: feb6f000-feb6f0ff : ehci_hcd */
284 .phys_start = 0xfeb6f000,
285 .virt_start = 0xfeb6f000,
287 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
289 /* MemRegion: feb70000-feb70fff : ohci_hcd */
291 .phys_start = 0xfeb70000,
292 .virt_start = 0xfeb70000,
294 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
296 /* MemRegion: feb71000-feb717ff : ahci */
298 .phys_start = 0xfeb71000,
299 .virt_start = 0xfeb71000,
301 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
303 /* MemRegion: feb80000-febfffff : pnp 00:02 */
305 .phys_start = 0xfeb80000,
306 .virt_start = 0xfeb80000,
308 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
310 /* MemRegion: fed00000-fed003ff : HPET 0 */
312 .phys_start = 0xfed00000,
313 .virt_start = 0xfed00000,
315 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
317 /* MemRegion: fed61000-fed70fff : pnp 00:09 */
319 .phys_start = 0xfed61000,
320 .virt_start = 0xfed61000,
322 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
324 /* MemRegion: 3f000000-3f1fffff : JAILHOUSE Inmate Memory */
326 .phys_start = 0x3f000000,
327 .virt_start = 0x3f000000,
329 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
334 /* IOAPIC 0, GSI base 0 */
336 .address = 0xfec00000,
338 .pin_bitmap = 0xffffff,
340 /* IOAPIC 1, GSI base 24 */
342 .address = 0xfec01000,
344 .pin_bitmap = 0xffffff,
349 [ 0/8 ... 0x1f/8] = -1,
350 [ 0x20/8 ... 0x27/8] = 0xfc, /* HACK: PIC */
351 [ 0x28/8 ... 0x3f/8] = -1,
352 [ 0x40/8 ... 0x47/8] = 0xf0, /* PIT */
353 [ 0x48/8 ... 0x5f/8] = -1,
354 [ 0x60/8 ... 0x67/8] = 0xec, /* HACK: NMI status/control */
355 [ 0x68/8 ... 0x6f/8] = -1,
356 [ 0x70/8 ... 0x77/8] = 0xfc, /* RTC */
357 [ 0x78/8 ... 0x7f/8] = -1,
358 [ 0x80/8 ... 0x87/8] = 0xfe, /* Port 80 (delays) */
359 [ 0x88/8 ... 0x3af/8] = -1,
360 [ 0x3b0/8 ... 0x3df/8] = 0x00, /* VGA */
361 [ 0x3e0/8 ... 0xcf7/8] = 0, /* HACK: PCI bus */
362 [ 0xcf8/8 ... 0xcff/8] = -1,
363 [ 0xd00/8 ... 0xffff/8] = 0, /* HACK: PCI bus */
367 /* PCIDevice: 00:00.0 */
369 .type = JAILHOUSE_PCI_TYPE_DEVICE,
374 .num_msi_vectors = 0,
376 .num_msix_vectors = 0,
377 .msix_region_size = 0x0,
380 /* PCIDevice: 00:01.0 */
382 .type = JAILHOUSE_PCI_TYPE_DEVICE,
388 .num_msi_vectors = 1,
390 .num_msix_vectors = 0,
391 .msix_region_size = 0x0,
394 /* PCIDevice: 00:01.1 */
396 .type = JAILHOUSE_PCI_TYPE_DEVICE,
402 .num_msi_vectors = 1,
404 .num_msix_vectors = 0,
405 .msix_region_size = 0x0,
408 /* PCIDevice: 00:02.0 */
410 .type = JAILHOUSE_PCI_TYPE_DEVICE,
416 .num_msi_vectors = 0,
418 .num_msix_vectors = 0,
419 .msix_region_size = 0x0,
422 /* PCIDevice: 00:03.0 */
424 .type = JAILHOUSE_PCI_TYPE_DEVICE,
430 .num_msi_vectors = 0,
432 .num_msix_vectors = 0,
433 .msix_region_size = 0x0,
436 /* PCIDevice: 00:03.1 */
438 .type = JAILHOUSE_PCI_TYPE_BRIDGE,
444 .num_msi_vectors = 1,
446 .num_msix_vectors = 0,
447 .msix_region_size = 0x0,
450 /* PCIDevice: 00:04.0 */
452 .type = JAILHOUSE_PCI_TYPE_DEVICE,
458 .num_msi_vectors = 0,
460 .num_msix_vectors = 0,
461 .msix_region_size = 0x0,
464 /* PCIDevice: 00:10.0 */
466 .type = JAILHOUSE_PCI_TYPE_DEVICE,
472 .num_msi_vectors = 8,
474 .num_msix_vectors = 8,
475 .msix_region_size = 0x1000,
476 .msix_address = 0xfeb6b000,
478 /* PCIDevice: 00:10.1 */
480 .type = JAILHOUSE_PCI_TYPE_DEVICE,
486 .num_msi_vectors = 8,
488 .num_msix_vectors = 8,
489 .msix_region_size = 0x1000,
490 .msix_address = 0xfeb69000,
492 /* PCIDevice: 00:11.0 */
494 .type = JAILHOUSE_PCI_TYPE_DEVICE,
500 .num_msi_vectors = 8,
502 .num_msix_vectors = 0,
503 .msix_region_size = 0x0,
506 /* PCIDevice: 00:12.0 */
508 .type = JAILHOUSE_PCI_TYPE_DEVICE,
514 .num_msi_vectors = 0,
516 .num_msix_vectors = 0,
517 .msix_region_size = 0x0,
520 /* PCIDevice: 00:12.2 */
522 .type = JAILHOUSE_PCI_TYPE_DEVICE,
528 .num_msi_vectors = 0,
530 .num_msix_vectors = 0,
531 .msix_region_size = 0x0,
534 /* PCIDevice: 00:13.0 */
536 .type = JAILHOUSE_PCI_TYPE_DEVICE,
542 .num_msi_vectors = 0,
544 .num_msix_vectors = 0,
545 .msix_region_size = 0x0,
548 /* PCIDevice: 00:13.2 */
550 .type = JAILHOUSE_PCI_TYPE_DEVICE,
556 .num_msi_vectors = 0,
558 .num_msix_vectors = 0,
559 .msix_region_size = 0x0,
562 /* PCIDevice: 00:14.0 */
564 .type = JAILHOUSE_PCI_TYPE_DEVICE,
570 .num_msi_vectors = 0,
572 .num_msix_vectors = 0,
573 .msix_region_size = 0x0,
576 /* PCIDevice: 00:14.2 */
578 .type = JAILHOUSE_PCI_TYPE_DEVICE,
584 .num_msi_vectors = 0,
586 .num_msix_vectors = 0,
587 .msix_region_size = 0x0,
590 /* PCIDevice: 00:14.3 */
592 .type = JAILHOUSE_PCI_TYPE_DEVICE,
598 .num_msi_vectors = 0,
600 .num_msix_vectors = 0,
601 .msix_region_size = 0x0,
604 /* PCIDevice: 00:14.4 */
606 .type = JAILHOUSE_PCI_TYPE_BRIDGE,
612 .num_msi_vectors = 0,
614 .num_msix_vectors = 0,
615 .msix_region_size = 0x0,
618 /* PCIDevice: 00:14.5 */
620 .type = JAILHOUSE_PCI_TYPE_DEVICE,
626 .num_msi_vectors = 0,
628 .num_msix_vectors = 0,
629 .msix_region_size = 0x0,
632 /* PCIDevice: 00:18.0 */
634 .type = JAILHOUSE_PCI_TYPE_DEVICE,
640 .num_msi_vectors = 0,
642 .num_msix_vectors = 0,
643 .msix_region_size = 0x0,
646 /* PCIDevice: 00:18.1 */
648 .type = JAILHOUSE_PCI_TYPE_DEVICE,
654 .num_msi_vectors = 0,
656 .num_msix_vectors = 0,
657 .msix_region_size = 0x0,
660 /* PCIDevice: 00:18.2 */
662 .type = JAILHOUSE_PCI_TYPE_DEVICE,
668 .num_msi_vectors = 0,
670 .num_msix_vectors = 0,
671 .msix_region_size = 0x0,
674 /* PCIDevice: 00:18.3 */
676 .type = JAILHOUSE_PCI_TYPE_DEVICE,
682 .num_msi_vectors = 0,
684 .num_msix_vectors = 0,
685 .msix_region_size = 0x0,
688 /* PCIDevice: 00:18.4 */
690 .type = JAILHOUSE_PCI_TYPE_DEVICE,
696 .num_msi_vectors = 0,
698 .num_msix_vectors = 0,
699 .msix_region_size = 0x0,
702 /* PCIDevice: 00:18.5 */
704 .type = JAILHOUSE_PCI_TYPE_DEVICE,
710 .num_msi_vectors = 0,
712 .num_msix_vectors = 0,
713 .msix_region_size = 0x0,
716 /* PCIDevice: 01:00.0 */
718 .type = JAILHOUSE_PCI_TYPE_DEVICE,
724 .num_msi_vectors = 1,
726 .num_msix_vectors = 4,
727 .msix_region_size = 0x1000,
728 .msix_address = 0xd0800000,
733 /* PCIDevice: 00:00.2 */
744 .flags = JAILHOUSE_PCICAPS_WRITE,
752 /* PCIDevice: 00:01.0 */
753 /* PCIDevice: 00:01.1 */
764 .flags = JAILHOUSE_PCICAPS_WRITE,
776 .flags = JAILHOUSE_PCICAPS_WRITE,
778 /* PCIDevice: 00:03.1 */
783 .flags = JAILHOUSE_PCICAPS_WRITE,
795 .flags = JAILHOUSE_PCICAPS_WRITE,
809 /* PCIDevice: 00:10.0 */
810 /* PCIDevice: 00:10.1 */
815 .flags = JAILHOUSE_PCICAPS_WRITE,
821 .flags = JAILHOUSE_PCICAPS_WRITE,
827 .flags = JAILHOUSE_PCICAPS_WRITE,
835 /* PCIDevice: 00:11.0 */
840 .flags = JAILHOUSE_PCICAPS_WRITE,
848 /* PCIDevice: 00:12.2 */
849 /* PCIDevice: 00:13.2 */
854 .flags = JAILHOUSE_PCICAPS_WRITE,
862 /* PCIDevice: 00:14.2 */
867 .flags = JAILHOUSE_PCICAPS_WRITE,
869 /* PCIDevice: 00:18.3 */
876 /* PCIDevice: 01:00.0 */
881 .flags = JAILHOUSE_PCICAPS_WRITE,
887 .flags = JAILHOUSE_PCICAPS_WRITE,
899 .flags = JAILHOUSE_PCICAPS_WRITE,