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,
58 .interrupt_limit = 256,
60 .name = "F2A88XM-HD3",
61 .cpu_set_size = sizeof(config.cpus),
62 .num_memory_regions = ARRAY_SIZE(config.mem_regions),
63 .num_irqchips = ARRAY_SIZE(config.irqchips),
64 .pio_bitmap_size = ARRAY_SIZE(config.pio_bitmap),
65 .num_pci_devices = ARRAY_SIZE(config.pci_devices),
66 .num_pci_caps = ARRAY_SIZE(config.pci_caps),
75 /* MemRegion: 00000000-0009e7ff : System RAM */
80 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
81 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
83 /* MemRegion: 000a0000-000bffff : PCI Bus 0000:00 */
85 .phys_start = 0xa0000,
86 .virt_start = 0xa0000,
88 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
90 /* MemRegion: 000c0000-000cf5ff : Video ROM */
92 .phys_start = 0xc0000,
93 .virt_start = 0xc0000,
95 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
97 /* MemRegion: 000e0000-000fffff : System ROM */
99 .phys_start = 0xe0000,
100 .virt_start = 0xe0000,
102 .flags = JAILHOUSE_MEM_READ,
104 /* MemRegion: 00100000-00ffffff : System RAM */
106 .phys_start = 0x100000,
107 .virt_start = 0x100000,
109 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
110 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
112 /* MemRegion: 01000000-01ffffff : Kernel */
114 .phys_start = 0x1000000,
115 .virt_start = 0x1000000,
117 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
118 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
120 /* MemRegion: 02000000-3affffff : System RAM */
122 .phys_start = 0x2000000,
123 .virt_start = 0x2000000,
125 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
126 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
128 /* MemRegion: 3f200000-6b8ecfff : System RAM */
130 .phys_start = 0x3f200000,
131 .virt_start = 0x3f200000,
133 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
134 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
136 /* MemRegion: 6b91d000-6bbdffff : System RAM */
138 .phys_start = 0x6b91d000,
139 .virt_start = 0x6b91d000,
141 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
142 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
144 /* MemRegion: 6bbe0000-6bcadfff : ACPI Non-volatile Storage */
146 .phys_start = 0x6bbe0000,
147 .virt_start = 0x6bbe0000,
149 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
151 /* MemRegion: 6d1c9000-6d1c9fff : System RAM */
153 .phys_start = 0x6d1c9000,
154 .virt_start = 0x6d1c9000,
156 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
157 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
159 /* MemRegion: 6d1ca000-6d3cffff : ACPI Non-volatile Storage */
161 .phys_start = 0x6d1ca000,
162 .virt_start = 0x6d1ca000,
164 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
166 /* MemRegion: 6d3d0000-6d850fff : System RAM */
168 .phys_start = 0x6d3d0000,
169 .virt_start = 0x6d3d0000,
171 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
172 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
174 /* MemRegion: 6dfe2000-6dffffff : System RAM */
176 .phys_start = 0x6dfe2000,
177 .virt_start = 0x6dfe2000,
179 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
180 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
182 /* MemRegion: 6e000000-6fffffff : RAM buffer */
184 .phys_start = 0x6e000000,
185 .virt_start = 0x6e000000,
187 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
188 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
190 /* MemRegion: c0000000-cfffffff : 0000:00:01.0 */
192 .phys_start = 0xc0000000,
193 .virt_start = 0xc0000000,
195 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
197 /* MemRegion: d0000000-d07fffff : 0000:00:01.0 */
199 .phys_start = 0xd0000000,
200 .virt_start = 0xd0000000,
202 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
204 /* MemRegion: d0801000-d0803fff : r8169 */
206 .phys_start = 0xd0801000,
207 .virt_start = 0xd0801000,
209 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
211 /* MemRegion: fea00000-fea00fff : r8169 */
213 .phys_start = 0xfea00000,
214 .virt_start = 0xfea00000,
216 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
218 /* MemRegion: feb00000-feb3ffff : 0000:00:01.0 */
220 .phys_start = 0xfeb00000,
221 .virt_start = 0xfeb00000,
223 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
225 /* MemRegion: feb40000-feb5ffff : 0000:00:01.0 */
227 .phys_start = 0xfeb40000,
228 .virt_start = 0xfeb40000,
230 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
232 /* MemRegion: feb60000-feb63fff : ICH HD audio */
234 .phys_start = 0xfeb60000,
235 .virt_start = 0xfeb60000,
237 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
239 /* MemRegion: feb64000-feb67fff : ICH HD audio */
241 .phys_start = 0xfeb64000,
242 .virt_start = 0xfeb64000,
244 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
246 /* MemRegion: feb68000-feb68fff : xhci_hcd */
248 .phys_start = 0xfeb68000,
249 .virt_start = 0xfeb68000,
251 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
253 /* MemRegion: feb6a000-feb6afff : xhci_hcd */
255 .phys_start = 0xfeb6a000,
256 .virt_start = 0xfeb6a000,
258 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
260 /* MemRegion: feb6c000-feb6cfff : ohci_hcd */
262 .phys_start = 0xfeb6c000,
263 .virt_start = 0xfeb6c000,
265 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
267 /* MemRegion: feb6d000-feb6d0ff : ehci_hcd */
269 .phys_start = 0xfeb6d000,
270 .virt_start = 0xfeb6d000,
272 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
274 /* MemRegion: feb6e000-feb6efff : ohci_hcd */
276 .phys_start = 0xfeb6e000,
277 .virt_start = 0xfeb6e000,
279 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
281 /* MemRegion: feb6f000-feb6f0ff : ehci_hcd */
283 .phys_start = 0xfeb6f000,
284 .virt_start = 0xfeb6f000,
286 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
288 /* MemRegion: feb70000-feb70fff : ohci_hcd */
290 .phys_start = 0xfeb70000,
291 .virt_start = 0xfeb70000,
293 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
295 /* MemRegion: feb71000-feb717ff : ahci */
297 .phys_start = 0xfeb71000,
298 .virt_start = 0xfeb71000,
300 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
302 /* MemRegion: feb80000-febfffff : pnp 00:02 */
304 .phys_start = 0xfeb80000,
305 .virt_start = 0xfeb80000,
307 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
309 /* MemRegion: fed00000-fed003ff : HPET 0 */
311 .phys_start = 0xfed00000,
312 .virt_start = 0xfed00000,
314 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
316 /* MemRegion: fed61000-fed70fff : pnp 00:09 */
318 .phys_start = 0xfed61000,
319 .virt_start = 0xfed61000,
321 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
323 /* MemRegion: 3f000000-3f1fffff : JAILHOUSE Inmate Memory */
325 .phys_start = 0x3f000000,
326 .virt_start = 0x3f000000,
328 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
333 /* IOAPIC 0, GSI base 0 */
335 .address = 0xfec00000,
337 .pin_bitmap = 0xffffff,
339 /* IOAPIC 1, GSI base 24 */
341 .address = 0xfec01000,
343 .pin_bitmap = 0xffffff,
348 [ 0/8 ... 0x1f/8] = -1,
349 [ 0x20/8 ... 0x27/8] = 0xfc, /* HACK: PIC */
350 [ 0x28/8 ... 0x3f/8] = -1,
351 [ 0x40/8 ... 0x47/8] = 0xf0, /* PIT */
352 [ 0x48/8 ... 0x5f/8] = -1,
353 [ 0x60/8 ... 0x67/8] = 0xec, /* HACK: NMI status/control */
354 [ 0x68/8 ... 0x6f/8] = -1,
355 [ 0x70/8 ... 0x77/8] = 0xfc, /* RTC */
356 [ 0x78/8 ... 0x7f/8] = -1,
357 [ 0x80/8 ... 0x87/8] = 0xfe, /* Port 80 (delays) */
358 [ 0x88/8 ... 0x3af/8] = -1,
359 [ 0x3b0/8 ... 0x3df/8] = 0x00, /* VGA */
360 [ 0x3e0/8 ... 0xcf7/8] = 0, /* HACK: PCI bus */
361 [ 0xcf8/8 ... 0xcff/8] = -1,
362 [ 0xd00/8 ... 0xffff/8] = 0, /* HACK: PCI bus */
366 /* PCIDevice: 00:00.0 */
368 .type = JAILHOUSE_PCI_TYPE_DEVICE,
373 .num_msi_vectors = 0,
375 .num_msix_vectors = 0,
376 .msix_region_size = 0x0,
379 /* PCIDevice: 00:01.0 */
381 .type = JAILHOUSE_PCI_TYPE_DEVICE,
387 .num_msi_vectors = 1,
389 .num_msix_vectors = 0,
390 .msix_region_size = 0x0,
393 /* PCIDevice: 00:01.1 */
395 .type = JAILHOUSE_PCI_TYPE_DEVICE,
401 .num_msi_vectors = 1,
403 .num_msix_vectors = 0,
404 .msix_region_size = 0x0,
407 /* PCIDevice: 00:02.0 */
409 .type = JAILHOUSE_PCI_TYPE_DEVICE,
415 .num_msi_vectors = 0,
417 .num_msix_vectors = 0,
418 .msix_region_size = 0x0,
421 /* PCIDevice: 00:03.0 */
423 .type = JAILHOUSE_PCI_TYPE_DEVICE,
429 .num_msi_vectors = 0,
431 .num_msix_vectors = 0,
432 .msix_region_size = 0x0,
435 /* PCIDevice: 00:03.1 */
437 .type = JAILHOUSE_PCI_TYPE_BRIDGE,
443 .num_msi_vectors = 1,
445 .num_msix_vectors = 0,
446 .msix_region_size = 0x0,
449 /* PCIDevice: 00:04.0 */
451 .type = JAILHOUSE_PCI_TYPE_DEVICE,
457 .num_msi_vectors = 0,
459 .num_msix_vectors = 0,
460 .msix_region_size = 0x0,
463 /* PCIDevice: 00:10.0 */
465 .type = JAILHOUSE_PCI_TYPE_DEVICE,
471 .num_msi_vectors = 8,
473 .num_msix_vectors = 8,
474 .msix_region_size = 0x1000,
475 .msix_address = 0xfeb6b000,
477 /* PCIDevice: 00:10.1 */
479 .type = JAILHOUSE_PCI_TYPE_DEVICE,
485 .num_msi_vectors = 8,
487 .num_msix_vectors = 8,
488 .msix_region_size = 0x1000,
489 .msix_address = 0xfeb69000,
491 /* PCIDevice: 00:11.0 */
493 .type = JAILHOUSE_PCI_TYPE_DEVICE,
499 .num_msi_vectors = 8,
501 .num_msix_vectors = 0,
502 .msix_region_size = 0x0,
505 /* PCIDevice: 00:12.0 */
507 .type = JAILHOUSE_PCI_TYPE_DEVICE,
513 .num_msi_vectors = 0,
515 .num_msix_vectors = 0,
516 .msix_region_size = 0x0,
519 /* PCIDevice: 00:12.2 */
521 .type = JAILHOUSE_PCI_TYPE_DEVICE,
527 .num_msi_vectors = 0,
529 .num_msix_vectors = 0,
530 .msix_region_size = 0x0,
533 /* PCIDevice: 00:13.0 */
535 .type = JAILHOUSE_PCI_TYPE_DEVICE,
541 .num_msi_vectors = 0,
543 .num_msix_vectors = 0,
544 .msix_region_size = 0x0,
547 /* PCIDevice: 00:13.2 */
549 .type = JAILHOUSE_PCI_TYPE_DEVICE,
555 .num_msi_vectors = 0,
557 .num_msix_vectors = 0,
558 .msix_region_size = 0x0,
561 /* PCIDevice: 00:14.0 */
563 .type = JAILHOUSE_PCI_TYPE_DEVICE,
569 .num_msi_vectors = 0,
571 .num_msix_vectors = 0,
572 .msix_region_size = 0x0,
575 /* PCIDevice: 00:14.2 */
577 .type = JAILHOUSE_PCI_TYPE_DEVICE,
583 .num_msi_vectors = 0,
585 .num_msix_vectors = 0,
586 .msix_region_size = 0x0,
589 /* PCIDevice: 00:14.3 */
591 .type = JAILHOUSE_PCI_TYPE_DEVICE,
597 .num_msi_vectors = 0,
599 .num_msix_vectors = 0,
600 .msix_region_size = 0x0,
603 /* PCIDevice: 00:14.4 */
605 .type = JAILHOUSE_PCI_TYPE_BRIDGE,
611 .num_msi_vectors = 0,
613 .num_msix_vectors = 0,
614 .msix_region_size = 0x0,
617 /* PCIDevice: 00:14.5 */
619 .type = JAILHOUSE_PCI_TYPE_DEVICE,
625 .num_msi_vectors = 0,
627 .num_msix_vectors = 0,
628 .msix_region_size = 0x0,
631 /* PCIDevice: 00:18.0 */
633 .type = JAILHOUSE_PCI_TYPE_DEVICE,
639 .num_msi_vectors = 0,
641 .num_msix_vectors = 0,
642 .msix_region_size = 0x0,
645 /* PCIDevice: 00:18.1 */
647 .type = JAILHOUSE_PCI_TYPE_DEVICE,
653 .num_msi_vectors = 0,
655 .num_msix_vectors = 0,
656 .msix_region_size = 0x0,
659 /* PCIDevice: 00:18.2 */
661 .type = JAILHOUSE_PCI_TYPE_DEVICE,
667 .num_msi_vectors = 0,
669 .num_msix_vectors = 0,
670 .msix_region_size = 0x0,
673 /* PCIDevice: 00:18.3 */
675 .type = JAILHOUSE_PCI_TYPE_DEVICE,
681 .num_msi_vectors = 0,
683 .num_msix_vectors = 0,
684 .msix_region_size = 0x0,
687 /* PCIDevice: 00:18.4 */
689 .type = JAILHOUSE_PCI_TYPE_DEVICE,
695 .num_msi_vectors = 0,
697 .num_msix_vectors = 0,
698 .msix_region_size = 0x0,
701 /* PCIDevice: 00:18.5 */
703 .type = JAILHOUSE_PCI_TYPE_DEVICE,
709 .num_msi_vectors = 0,
711 .num_msix_vectors = 0,
712 .msix_region_size = 0x0,
715 /* PCIDevice: 01:00.0 */
717 .type = JAILHOUSE_PCI_TYPE_DEVICE,
723 .num_msi_vectors = 1,
725 .num_msix_vectors = 4,
726 .msix_region_size = 0x1000,
727 .msix_address = 0xd0800000,
732 /* PCIDevice: 00:00.2 */
743 .flags = JAILHOUSE_PCICAPS_WRITE,
751 /* PCIDevice: 00:01.0 */
752 /* PCIDevice: 00:01.1 */
763 .flags = JAILHOUSE_PCICAPS_WRITE,
775 .flags = JAILHOUSE_PCICAPS_WRITE,
777 /* PCIDevice: 00:03.1 */
782 .flags = JAILHOUSE_PCICAPS_WRITE,
794 .flags = JAILHOUSE_PCICAPS_WRITE,
808 /* PCIDevice: 00:10.0 */
809 /* PCIDevice: 00:10.1 */
814 .flags = JAILHOUSE_PCICAPS_WRITE,
820 .flags = JAILHOUSE_PCICAPS_WRITE,
826 .flags = JAILHOUSE_PCICAPS_WRITE,
834 /* PCIDevice: 00:11.0 */
839 .flags = JAILHOUSE_PCICAPS_WRITE,
847 /* PCIDevice: 00:12.2 */
848 /* PCIDevice: 00:13.2 */
853 .flags = JAILHOUSE_PCICAPS_WRITE,
861 /* PCIDevice: 00:14.2 */
866 .flags = JAILHOUSE_PCICAPS_WRITE,
868 /* PCIDevice: 00:18.3 */
875 /* PCIDevice: 01:00.0 */
880 .flags = JAILHOUSE_PCICAPS_WRITE,
886 .flags = JAILHOUSE_PCICAPS_WRITE,
898 .flags = JAILHOUSE_PCICAPS_WRITE,