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[33];
29 struct jailhouse_irqchip irqchips[2];
30 __u8 pio_bitmap[0x2000];
31 struct jailhouse_pci_device pci_devices[24];
32 struct jailhouse_pci_capability pci_caps[26];
33 } __attribute__((packed)) config = {
35 .hypervisor_memory = {
36 .phys_start = 0x3b000000,
39 .platform_info.x86 = {
40 .mmconfig_base = 0xe0000000,
41 .mmconfig_end_bus = 0xff,
42 .pm_timer_address = 0x808,
45 .name = "F2A88XM-HD3",
46 .cpu_set_size = sizeof(config.cpus),
47 .num_memory_regions = ARRAY_SIZE(config.mem_regions),
48 .num_irqchips = ARRAY_SIZE(config.irqchips),
49 .pio_bitmap_size = ARRAY_SIZE(config.pio_bitmap),
50 .num_pci_devices = ARRAY_SIZE(config.pci_devices),
51 .num_pci_caps = ARRAY_SIZE(config.pci_caps),
60 /* MemRegion: 00000000-0009e7ff : System RAM */
65 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
66 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
68 /* MemRegion: 000a0000-000bffff : PCI Bus 0000:00 */
70 .phys_start = 0xa0000,
71 .virt_start = 0xa0000,
73 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
75 /* MemRegion: 000c0000-000cf5ff : Video ROM */
77 .phys_start = 0xc0000,
78 .virt_start = 0xc0000,
80 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
82 /* MemRegion: 000e0000-000fffff : System ROM */
84 .phys_start = 0xe0000,
85 .virt_start = 0xe0000,
87 .flags = JAILHOUSE_MEM_READ,
89 /* MemRegion: 00100000-3affffff : System RAM */
91 .phys_start = 0x100000,
92 .virt_start = 0x100000,
94 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
95 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
97 /* MemRegion: 3f200000-6c046fff : System RAM */
99 .phys_start = 0x3f200000,
100 .virt_start = 0x3f200000,
102 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
103 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
105 /* MemRegion: 6c077000-6c339fff : System RAM */
107 .phys_start = 0x6c077000,
108 .virt_start = 0x6c077000,
110 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
111 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
113 /* MemRegion: 6c33a000-6c407fff : ACPI Non-volatile Storage */
115 .phys_start = 0x6c33a000,
116 .virt_start = 0x6c33a000,
118 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
120 /* MemRegion: 6d1c9000-6d1c9fff : System RAM */
122 .phys_start = 0x6d1c9000,
123 .virt_start = 0x6d1c9000,
125 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
126 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
128 /* MemRegion: 6d1ca000-6d3cffff : ACPI Non-volatile Storage */
130 .phys_start = 0x6d1ca000,
131 .virt_start = 0x6d1ca000,
133 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
135 /* MemRegion: 6d3d0000-6d850fff : System RAM */
137 .phys_start = 0x6d3d0000,
138 .virt_start = 0x6d3d0000,
140 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
141 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
143 /* MemRegion: 6dfe2000-6dffffff : System RAM */
145 .phys_start = 0x6dfe2000,
146 .virt_start = 0x6dfe2000,
148 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
149 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
151 /* MemRegion: 6e000000-6fffffff : RAM buffer */
153 .phys_start = 0x6e000000,
154 .virt_start = 0x6e000000,
156 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
157 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
159 /* MemRegion: c0000000-cfffffff : 0000:00:01.0 */
161 .phys_start = 0xc0000000,
162 .virt_start = 0xc0000000,
164 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
166 /* MemRegion: d0000000-d07fffff : 0000:00:01.0 */
168 .phys_start = 0xd0000000,
169 .virt_start = 0xd0000000,
171 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
173 /* MemRegion: d0801000-d0803fff : r8169 */
175 .phys_start = 0xd0801000,
176 .virt_start = 0xd0801000,
178 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
180 /* MemRegion: fea00000-fea00fff : r8169 */
182 .phys_start = 0xfea00000,
183 .virt_start = 0xfea00000,
185 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
187 /* MemRegion: feb00000-feb3ffff : 0000:00:01.0 */
189 .phys_start = 0xfeb00000,
190 .virt_start = 0xfeb00000,
192 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
194 /* MemRegion: feb40000-feb5ffff : 0000:00:01.0 */
196 .phys_start = 0xfeb40000,
197 .virt_start = 0xfeb40000,
199 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
201 /* MemRegion: feb60000-feb63fff : ICH HD audio */
203 .phys_start = 0xfeb60000,
204 .virt_start = 0xfeb60000,
206 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
208 /* MemRegion: feb64000-feb67fff : ICH HD audio */
210 .phys_start = 0xfeb64000,
211 .virt_start = 0xfeb64000,
213 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
215 /* MemRegion: feb68000-feb68fff : xhci_hcd */
217 .phys_start = 0xfeb68000,
218 .virt_start = 0xfeb68000,
220 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
222 /* MemRegion: feb6a000-feb6afff : xhci_hcd */
224 .phys_start = 0xfeb6a000,
225 .virt_start = 0xfeb6a000,
227 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
229 /* MemRegion: feb6c000-feb6cfff : ohci_hcd */
231 .phys_start = 0xfeb6c000,
232 .virt_start = 0xfeb6c000,
234 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
236 /* MemRegion: feb6d000-feb6d0ff : ehci_hcd */
238 .phys_start = 0xfeb6d000,
239 .virt_start = 0xfeb6d000,
241 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
243 /* MemRegion: feb6e000-feb6efff : ohci_hcd */
245 .phys_start = 0xfeb6e000,
246 .virt_start = 0xfeb6e000,
248 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
250 /* MemRegion: feb6f000-feb6f0ff : ehci_hcd */
252 .phys_start = 0xfeb6f000,
253 .virt_start = 0xfeb6f000,
255 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
257 /* MemRegion: feb70000-feb70fff : ohci_hcd */
259 .phys_start = 0xfeb70000,
260 .virt_start = 0xfeb70000,
262 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
264 /* MemRegion: feb71000-feb717ff : ahci */
266 .phys_start = 0xfeb71000,
267 .virt_start = 0xfeb71000,
269 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
271 /* MemRegion: feb80000-febfffff : amd_iommu */
273 .phys_start = 0xfeb80000,
274 .virt_start = 0xfeb80000,
276 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
278 /* MemRegion: fed00000-fed003ff : HPET 0 */
280 .phys_start = 0xfed00000,
281 .virt_start = 0xfed00000,
283 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
285 /* MemRegion: fed61000-fed70fff : pnp 00:0a */
287 .phys_start = 0xfed61000,
288 .virt_start = 0xfed61000,
290 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
292 /* MemRegion: 3f000000-3f1fffff : JAILHOUSE Inmate Memory */
294 .phys_start = 0x3f000000,
295 .virt_start = 0x3f000000,
297 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
302 /* IOAPIC 0, GSI base 0 */
304 .address = 0xfec00000,
306 .pin_bitmap = 0xffffff,
308 /* IOAPIC 1, GSI base 24 */
310 .address = 0xfec01000,
312 .pin_bitmap = 0xffffff,
317 [ 0/8 ... 0x1f/8] = -1,
318 [ 0x20/8 ... 0x27/8] = 0xfc, /* HACK: PIC */
319 [ 0x28/8 ... 0x3f/8] = -1,
320 [ 0x40/8 ... 0x47/8] = 0xf0, /* PIT */
321 [ 0x48/8 ... 0x5f/8] = -1,
322 [ 0x60/8 ... 0x67/8] = 0xec, /* HACK: NMI status/control */
323 [ 0x68/8 ... 0x6f/8] = -1,
324 [ 0x70/8 ... 0x77/8] = 0xfc, /* RTC */
325 [ 0x78/8 ... 0x7f/8] = -1,
326 [ 0x80/8 ... 0x87/8] = 0xfe, /* Port 80 (delays) */
327 [ 0x88/8 ... 0x3af/8] = -1,
328 [ 0x3b0/8 ... 0x3df/8] = 0x00, /* VGA */
329 [ 0x3e0/8 ... 0xcf7/8] = 0, /* HACK: PCI bus */
330 [ 0xcf8/8 ... 0xcff/8] = -1,
331 [ 0xd00/8 ... 0xffff/8] = 0, /* HACK: PCI bus */
335 /* PCIDevice: 00:00.0 */
337 .type = JAILHOUSE_PCI_TYPE_DEVICE,
343 /* PCIDevice: 00:00.2 */
345 .type = JAILHOUSE_PCI_TYPE_DEVICE,
351 /* PCIDevice: 00:01.0 */
353 .type = JAILHOUSE_PCI_TYPE_DEVICE,
359 /* PCIDevice: 00:01.1 */
361 .type = JAILHOUSE_PCI_TYPE_DEVICE,
367 /* PCIDevice: 00:04.0 */
369 .type = JAILHOUSE_PCI_TYPE_BRIDGE,
375 /* PCIDevice: 00:10.0 */
377 .type = JAILHOUSE_PCI_TYPE_DEVICE,
383 /* PCIDevice: 00:10.1 */
385 .type = JAILHOUSE_PCI_TYPE_DEVICE,
391 /* PCIDevice: 00:11.0 */
393 .type = JAILHOUSE_PCI_TYPE_DEVICE,
399 /* PCIDevice: 00:12.0 */
401 .type = JAILHOUSE_PCI_TYPE_DEVICE,
407 /* PCIDevice: 00:12.2 */
409 .type = JAILHOUSE_PCI_TYPE_DEVICE,
415 /* PCIDevice: 00:13.0 */
417 .type = JAILHOUSE_PCI_TYPE_DEVICE,
423 /* PCIDevice: 00:13.2 */
425 .type = JAILHOUSE_PCI_TYPE_DEVICE,
431 /* PCIDevice: 00:14.0 */
433 .type = JAILHOUSE_PCI_TYPE_DEVICE,
439 /* PCIDevice: 00:14.2 */
441 .type = JAILHOUSE_PCI_TYPE_DEVICE,
447 /* PCIDevice: 00:14.3 */
449 .type = JAILHOUSE_PCI_TYPE_DEVICE,
455 /* PCIDevice: 00:14.4 */
457 .type = JAILHOUSE_PCI_TYPE_BRIDGE,
463 /* PCIDevice: 00:14.5 */
465 .type = JAILHOUSE_PCI_TYPE_DEVICE,
471 /* PCIDevice: 00:18.0 */
473 .type = JAILHOUSE_PCI_TYPE_DEVICE,
479 /* PCIDevice: 00:18.1 */
481 .type = JAILHOUSE_PCI_TYPE_DEVICE,
487 /* PCIDevice: 00:18.2 */
489 .type = JAILHOUSE_PCI_TYPE_DEVICE,
495 /* PCIDevice: 00:18.3 */
497 .type = JAILHOUSE_PCI_TYPE_DEVICE,
503 /* PCIDevice: 00:18.4 */
505 .type = JAILHOUSE_PCI_TYPE_DEVICE,
511 /* PCIDevice: 00:18.5 */
513 .type = JAILHOUSE_PCI_TYPE_DEVICE,
519 /* PCIDevice: 01:00.0 */
521 .type = JAILHOUSE_PCI_TYPE_DEVICE,
530 /* PCIDevice: 00:00.2 */
541 .flags = JAILHOUSE_PCICAPS_WRITE,
549 /* PCIDevice: 00:01.0 */
550 /* PCIDevice: 00:01.1 */
555 .flags = JAILHOUSE_PCICAPS_WRITE,
567 .flags = JAILHOUSE_PCICAPS_WRITE,
569 /* PCIDevice: 00:04.0 */
574 .flags = JAILHOUSE_PCICAPS_WRITE,
586 .flags = JAILHOUSE_PCICAPS_WRITE,
600 /* PCIDevice: 00:10.0 */
601 /* PCIDevice: 00:10.1 */
606 .flags = JAILHOUSE_PCICAPS_WRITE,
612 .flags = JAILHOUSE_PCICAPS_WRITE,
618 .flags = JAILHOUSE_PCICAPS_WRITE,
626 /* PCIDevice: 00:11.0 */
631 .flags = JAILHOUSE_PCICAPS_WRITE,
639 /* PCIDevice: 00:12.2 */
640 /* PCIDevice: 00:13.2 */
645 .flags = JAILHOUSE_PCICAPS_WRITE,
653 /* PCIDevice: 00:14.2 */
658 .flags = JAILHOUSE_PCICAPS_WRITE,
660 /* PCIDevice: 00:18.3 */
667 /* PCIDevice: 01:00.0 */
672 .flags = JAILHOUSE_PCICAPS_WRITE,
678 .flags = JAILHOUSE_PCICAPS_WRITE,
690 .flags = JAILHOUSE_PCICAPS_WRITE,