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 .interrupt_limit = 256,
56 .name = "F2A88XM-HD3",
57 .cpu_set_size = sizeof(config.cpus),
58 .num_memory_regions = ARRAY_SIZE(config.mem_regions),
59 .num_irqchips = ARRAY_SIZE(config.irqchips),
60 .pio_bitmap_size = ARRAY_SIZE(config.pio_bitmap),
61 .num_pci_devices = ARRAY_SIZE(config.pci_devices),
62 .num_pci_caps = ARRAY_SIZE(config.pci_caps),
71 /* MemRegion: 00000000-0009e7ff : System RAM */
76 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
77 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
79 /* MemRegion: 000a0000-000bffff : PCI Bus 0000:00 */
81 .phys_start = 0xa0000,
82 .virt_start = 0xa0000,
84 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
86 /* MemRegion: 000c0000-000cf5ff : Video ROM */
88 .phys_start = 0xc0000,
89 .virt_start = 0xc0000,
91 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
93 /* MemRegion: 000e0000-000fffff : System ROM */
95 .phys_start = 0xe0000,
96 .virt_start = 0xe0000,
98 .flags = JAILHOUSE_MEM_READ,
100 /* MemRegion: 00100000-00ffffff : System RAM */
102 .phys_start = 0x100000,
103 .virt_start = 0x100000,
105 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
106 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
108 /* MemRegion: 01000000-01ffffff : Kernel */
110 .phys_start = 0x1000000,
111 .virt_start = 0x1000000,
113 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
114 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
116 /* MemRegion: 02000000-3affffff : System RAM */
118 .phys_start = 0x2000000,
119 .virt_start = 0x2000000,
121 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
122 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
124 /* MemRegion: 3f200000-6b8ecfff : System RAM */
126 .phys_start = 0x3f200000,
127 .virt_start = 0x3f200000,
129 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
130 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
132 /* MemRegion: 6b91d000-6bbdffff : System RAM */
134 .phys_start = 0x6b91d000,
135 .virt_start = 0x6b91d000,
137 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
138 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
140 /* MemRegion: 6bbe0000-6bcadfff : ACPI Non-volatile Storage */
142 .phys_start = 0x6bbe0000,
143 .virt_start = 0x6bbe0000,
145 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
147 /* MemRegion: 6d1c9000-6d1c9fff : System RAM */
149 .phys_start = 0x6d1c9000,
150 .virt_start = 0x6d1c9000,
152 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
153 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
155 /* MemRegion: 6d1ca000-6d3cffff : ACPI Non-volatile Storage */
157 .phys_start = 0x6d1ca000,
158 .virt_start = 0x6d1ca000,
160 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
162 /* MemRegion: 6d3d0000-6d850fff : System RAM */
164 .phys_start = 0x6d3d0000,
165 .virt_start = 0x6d3d0000,
167 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
168 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
170 /* MemRegion: 6dfe2000-6dffffff : System RAM */
172 .phys_start = 0x6dfe2000,
173 .virt_start = 0x6dfe2000,
175 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
176 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
178 /* MemRegion: 6e000000-6fffffff : RAM buffer */
180 .phys_start = 0x6e000000,
181 .virt_start = 0x6e000000,
183 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
184 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
186 /* MemRegion: c0000000-cfffffff : 0000:00:01.0 */
188 .phys_start = 0xc0000000,
189 .virt_start = 0xc0000000,
191 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
193 /* MemRegion: d0000000-d07fffff : 0000:00:01.0 */
195 .phys_start = 0xd0000000,
196 .virt_start = 0xd0000000,
198 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
200 /* MemRegion: d0801000-d0803fff : r8169 */
202 .phys_start = 0xd0801000,
203 .virt_start = 0xd0801000,
205 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
207 /* MemRegion: fea00000-fea00fff : r8169 */
209 .phys_start = 0xfea00000,
210 .virt_start = 0xfea00000,
212 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
214 /* MemRegion: feb00000-feb3ffff : 0000:00:01.0 */
216 .phys_start = 0xfeb00000,
217 .virt_start = 0xfeb00000,
219 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
221 /* MemRegion: feb40000-feb5ffff : 0000:00:01.0 */
223 .phys_start = 0xfeb40000,
224 .virt_start = 0xfeb40000,
226 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
228 /* MemRegion: feb60000-feb63fff : ICH HD audio */
230 .phys_start = 0xfeb60000,
231 .virt_start = 0xfeb60000,
233 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
235 /* MemRegion: feb64000-feb67fff : ICH HD audio */
237 .phys_start = 0xfeb64000,
238 .virt_start = 0xfeb64000,
240 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
242 /* MemRegion: feb68000-feb68fff : xhci_hcd */
244 .phys_start = 0xfeb68000,
245 .virt_start = 0xfeb68000,
247 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
249 /* MemRegion: feb6a000-feb6afff : xhci_hcd */
251 .phys_start = 0xfeb6a000,
252 .virt_start = 0xfeb6a000,
254 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
256 /* MemRegion: feb6c000-feb6cfff : ohci_hcd */
258 .phys_start = 0xfeb6c000,
259 .virt_start = 0xfeb6c000,
261 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
263 /* MemRegion: feb6d000-feb6d0ff : ehci_hcd */
265 .phys_start = 0xfeb6d000,
266 .virt_start = 0xfeb6d000,
268 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
270 /* MemRegion: feb6e000-feb6efff : ohci_hcd */
272 .phys_start = 0xfeb6e000,
273 .virt_start = 0xfeb6e000,
275 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
277 /* MemRegion: feb6f000-feb6f0ff : ehci_hcd */
279 .phys_start = 0xfeb6f000,
280 .virt_start = 0xfeb6f000,
282 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
284 /* MemRegion: feb70000-feb70fff : ohci_hcd */
286 .phys_start = 0xfeb70000,
287 .virt_start = 0xfeb70000,
289 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
291 /* MemRegion: feb71000-feb717ff : ahci */
293 .phys_start = 0xfeb71000,
294 .virt_start = 0xfeb71000,
296 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
298 /* MemRegion: feb80000-febfffff : pnp 00:02 */
300 .phys_start = 0xfeb80000,
301 .virt_start = 0xfeb80000,
303 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
305 /* MemRegion: fed00000-fed003ff : HPET 0 */
307 .phys_start = 0xfed00000,
308 .virt_start = 0xfed00000,
310 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
312 /* MemRegion: fed61000-fed70fff : pnp 00:09 */
314 .phys_start = 0xfed61000,
315 .virt_start = 0xfed61000,
317 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
319 /* MemRegion: 3f000000-3f1fffff : JAILHOUSE Inmate Memory */
321 .phys_start = 0x3f000000,
322 .virt_start = 0x3f000000,
324 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
329 /* IOAPIC 0, GSI base 0 */
331 .address = 0xfec00000,
333 .pin_bitmap = 0xffffff,
335 /* IOAPIC 1, GSI base 24 */
337 .address = 0xfec01000,
339 .pin_bitmap = 0xffffff,
344 [ 0/8 ... 0x1f/8] = -1,
345 [ 0x20/8 ... 0x27/8] = 0xfc, /* HACK: PIC */
346 [ 0x28/8 ... 0x3f/8] = -1,
347 [ 0x40/8 ... 0x47/8] = 0xf0, /* PIT */
348 [ 0x48/8 ... 0x5f/8] = -1,
349 [ 0x60/8 ... 0x67/8] = 0xec, /* HACK: NMI status/control */
350 [ 0x68/8 ... 0x6f/8] = -1,
351 [ 0x70/8 ... 0x77/8] = 0xfc, /* RTC */
352 [ 0x78/8 ... 0x7f/8] = -1,
353 [ 0x80/8 ... 0x87/8] = 0xfe, /* Port 80 (delays) */
354 [ 0x88/8 ... 0x3af/8] = -1,
355 [ 0x3b0/8 ... 0x3df/8] = 0x00, /* VGA */
356 [ 0x3e0/8 ... 0xcf7/8] = 0, /* HACK: PCI bus */
357 [ 0xcf8/8 ... 0xcff/8] = -1,
358 [ 0xd00/8 ... 0xffff/8] = 0, /* HACK: PCI bus */
362 /* PCIDevice: 00:00.0 */
364 .type = JAILHOUSE_PCI_TYPE_DEVICE,
369 .num_msi_vectors = 0,
371 .num_msix_vectors = 0,
372 .msix_region_size = 0x0,
375 /* PCIDevice: 00:01.0 */
377 .type = JAILHOUSE_PCI_TYPE_DEVICE,
383 .num_msi_vectors = 1,
385 .num_msix_vectors = 0,
386 .msix_region_size = 0x0,
389 /* PCIDevice: 00:01.1 */
391 .type = JAILHOUSE_PCI_TYPE_DEVICE,
397 .num_msi_vectors = 1,
399 .num_msix_vectors = 0,
400 .msix_region_size = 0x0,
403 /* PCIDevice: 00:02.0 */
405 .type = JAILHOUSE_PCI_TYPE_DEVICE,
411 .num_msi_vectors = 0,
413 .num_msix_vectors = 0,
414 .msix_region_size = 0x0,
417 /* PCIDevice: 00:03.0 */
419 .type = JAILHOUSE_PCI_TYPE_DEVICE,
425 .num_msi_vectors = 0,
427 .num_msix_vectors = 0,
428 .msix_region_size = 0x0,
431 /* PCIDevice: 00:03.1 */
433 .type = JAILHOUSE_PCI_TYPE_BRIDGE,
439 .num_msi_vectors = 1,
441 .num_msix_vectors = 0,
442 .msix_region_size = 0x0,
445 /* PCIDevice: 00:04.0 */
447 .type = JAILHOUSE_PCI_TYPE_DEVICE,
453 .num_msi_vectors = 0,
455 .num_msix_vectors = 0,
456 .msix_region_size = 0x0,
459 /* PCIDevice: 00:10.0 */
461 .type = JAILHOUSE_PCI_TYPE_DEVICE,
467 .num_msi_vectors = 8,
469 .num_msix_vectors = 8,
470 .msix_region_size = 0x1000,
471 .msix_address = 0xfeb6b000,
473 /* PCIDevice: 00:10.1 */
475 .type = JAILHOUSE_PCI_TYPE_DEVICE,
481 .num_msi_vectors = 8,
483 .num_msix_vectors = 8,
484 .msix_region_size = 0x1000,
485 .msix_address = 0xfeb69000,
487 /* PCIDevice: 00:11.0 */
489 .type = JAILHOUSE_PCI_TYPE_DEVICE,
495 .num_msi_vectors = 8,
497 .num_msix_vectors = 0,
498 .msix_region_size = 0x0,
501 /* PCIDevice: 00:12.0 */
503 .type = JAILHOUSE_PCI_TYPE_DEVICE,
509 .num_msi_vectors = 0,
511 .num_msix_vectors = 0,
512 .msix_region_size = 0x0,
515 /* PCIDevice: 00:12.2 */
517 .type = JAILHOUSE_PCI_TYPE_DEVICE,
523 .num_msi_vectors = 0,
525 .num_msix_vectors = 0,
526 .msix_region_size = 0x0,
529 /* PCIDevice: 00:13.0 */
531 .type = JAILHOUSE_PCI_TYPE_DEVICE,
537 .num_msi_vectors = 0,
539 .num_msix_vectors = 0,
540 .msix_region_size = 0x0,
543 /* PCIDevice: 00:13.2 */
545 .type = JAILHOUSE_PCI_TYPE_DEVICE,
551 .num_msi_vectors = 0,
553 .num_msix_vectors = 0,
554 .msix_region_size = 0x0,
557 /* PCIDevice: 00:14.0 */
559 .type = JAILHOUSE_PCI_TYPE_DEVICE,
565 .num_msi_vectors = 0,
567 .num_msix_vectors = 0,
568 .msix_region_size = 0x0,
571 /* PCIDevice: 00:14.2 */
573 .type = JAILHOUSE_PCI_TYPE_DEVICE,
579 .num_msi_vectors = 0,
581 .num_msix_vectors = 0,
582 .msix_region_size = 0x0,
585 /* PCIDevice: 00:14.3 */
587 .type = JAILHOUSE_PCI_TYPE_DEVICE,
593 .num_msi_vectors = 0,
595 .num_msix_vectors = 0,
596 .msix_region_size = 0x0,
599 /* PCIDevice: 00:14.4 */
601 .type = JAILHOUSE_PCI_TYPE_BRIDGE,
607 .num_msi_vectors = 0,
609 .num_msix_vectors = 0,
610 .msix_region_size = 0x0,
613 /* PCIDevice: 00:14.5 */
615 .type = JAILHOUSE_PCI_TYPE_DEVICE,
621 .num_msi_vectors = 0,
623 .num_msix_vectors = 0,
624 .msix_region_size = 0x0,
627 /* PCIDevice: 00:18.0 */
629 .type = JAILHOUSE_PCI_TYPE_DEVICE,
635 .num_msi_vectors = 0,
637 .num_msix_vectors = 0,
638 .msix_region_size = 0x0,
641 /* PCIDevice: 00:18.1 */
643 .type = JAILHOUSE_PCI_TYPE_DEVICE,
649 .num_msi_vectors = 0,
651 .num_msix_vectors = 0,
652 .msix_region_size = 0x0,
655 /* PCIDevice: 00:18.2 */
657 .type = JAILHOUSE_PCI_TYPE_DEVICE,
663 .num_msi_vectors = 0,
665 .num_msix_vectors = 0,
666 .msix_region_size = 0x0,
669 /* PCIDevice: 00:18.3 */
671 .type = JAILHOUSE_PCI_TYPE_DEVICE,
677 .num_msi_vectors = 0,
679 .num_msix_vectors = 0,
680 .msix_region_size = 0x0,
683 /* PCIDevice: 00:18.4 */
685 .type = JAILHOUSE_PCI_TYPE_DEVICE,
691 .num_msi_vectors = 0,
693 .num_msix_vectors = 0,
694 .msix_region_size = 0x0,
697 /* PCIDevice: 00:18.5 */
699 .type = JAILHOUSE_PCI_TYPE_DEVICE,
705 .num_msi_vectors = 0,
707 .num_msix_vectors = 0,
708 .msix_region_size = 0x0,
711 /* PCIDevice: 01:00.0 */
713 .type = JAILHOUSE_PCI_TYPE_DEVICE,
719 .num_msi_vectors = 1,
721 .num_msix_vectors = 4,
722 .msix_region_size = 0x1000,
723 .msix_address = 0xd0800000,
728 /* PCIDevice: 00:00.2 */
739 .flags = JAILHOUSE_PCICAPS_WRITE,
747 /* PCIDevice: 00:01.0 */
748 /* PCIDevice: 00:01.1 */
759 .flags = JAILHOUSE_PCICAPS_WRITE,
771 .flags = JAILHOUSE_PCICAPS_WRITE,
773 /* PCIDevice: 00:03.1 */
778 .flags = JAILHOUSE_PCICAPS_WRITE,
790 .flags = JAILHOUSE_PCICAPS_WRITE,
804 /* PCIDevice: 00:10.0 */
805 /* PCIDevice: 00:10.1 */
810 .flags = JAILHOUSE_PCICAPS_WRITE,
816 .flags = JAILHOUSE_PCICAPS_WRITE,
822 .flags = JAILHOUSE_PCICAPS_WRITE,
830 /* PCIDevice: 00:11.0 */
835 .flags = JAILHOUSE_PCICAPS_WRITE,
843 /* PCIDevice: 00:12.2 */
844 /* PCIDevice: 00:13.2 */
849 .flags = JAILHOUSE_PCICAPS_WRITE,
857 /* PCIDevice: 00:14.2 */
862 .flags = JAILHOUSE_PCICAPS_WRITE,
864 /* PCIDevice: 00:18.3 */
871 /* PCIDevice: 01:00.0 */
876 .flags = JAILHOUSE_PCICAPS_WRITE,
882 .flags = JAILHOUSE_PCICAPS_WRITE,
894 .flags = JAILHOUSE_PCICAPS_WRITE,