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[1];
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,
46 .name = "F2A88XM-HD3",
47 .cpu_set_size = sizeof(config.cpus),
48 .num_memory_regions = ARRAY_SIZE(config.mem_regions),
49 .num_irqchips = ARRAY_SIZE(config.irqchips),
50 .pio_bitmap_size = ARRAY_SIZE(config.pio_bitmap),
51 .num_pci_devices = ARRAY_SIZE(config.pci_devices),
52 .num_pci_caps = ARRAY_SIZE(config.pci_caps),
61 /* MemRegion: 00000000-0009e7ff : System RAM */
66 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
67 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
69 /* MemRegion: 000a0000-000bffff : PCI Bus 0000:00 */
71 .phys_start = 0xa0000,
72 .virt_start = 0xa0000,
74 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
76 /* MemRegion: 000c0000-000cf5ff : Video ROM */
78 .phys_start = 0xc0000,
79 .virt_start = 0xc0000,
81 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
83 /* MemRegion: 000e0000-000fffff : System ROM */
85 .phys_start = 0xe0000,
86 .virt_start = 0xe0000,
88 .flags = JAILHOUSE_MEM_READ,
90 /* MemRegion: 00100000-3affffff : System RAM */
92 .phys_start = 0x100000,
93 .virt_start = 0x100000,
95 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
96 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
98 /* MemRegion: 3f200000-6c046fff : System RAM */
100 .phys_start = 0x3f200000,
101 .virt_start = 0x3f200000,
103 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
104 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
106 /* MemRegion: 6c077000-6c339fff : System RAM */
108 .phys_start = 0x6c077000,
109 .virt_start = 0x6c077000,
111 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
112 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
114 /* MemRegion: 6c33a000-6c407fff : ACPI Non-volatile Storage */
116 .phys_start = 0x6c33a000,
117 .virt_start = 0x6c33a000,
119 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
121 /* MemRegion: 6d1c9000-6d1c9fff : System RAM */
123 .phys_start = 0x6d1c9000,
124 .virt_start = 0x6d1c9000,
126 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
127 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
129 /* MemRegion: 6d1ca000-6d3cffff : ACPI Non-volatile Storage */
131 .phys_start = 0x6d1ca000,
132 .virt_start = 0x6d1ca000,
134 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
136 /* MemRegion: 6d3d0000-6d850fff : System RAM */
138 .phys_start = 0x6d3d0000,
139 .virt_start = 0x6d3d0000,
141 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
142 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
144 /* MemRegion: 6dfe2000-6dffffff : System RAM */
146 .phys_start = 0x6dfe2000,
147 .virt_start = 0x6dfe2000,
149 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
150 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
152 /* MemRegion: 6e000000-6fffffff : RAM buffer */
154 .phys_start = 0x6e000000,
155 .virt_start = 0x6e000000,
157 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
158 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
160 /* MemRegion: c0000000-cfffffff : 0000:00:01.0 */
162 .phys_start = 0xc0000000,
163 .virt_start = 0xc0000000,
165 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
167 /* MemRegion: d0000000-d07fffff : 0000:00:01.0 */
169 .phys_start = 0xd0000000,
170 .virt_start = 0xd0000000,
172 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
174 /* MemRegion: d0801000-d0803fff : r8169 */
176 .phys_start = 0xd0801000,
177 .virt_start = 0xd0801000,
179 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
181 /* MemRegion: fea00000-fea00fff : r8169 */
183 .phys_start = 0xfea00000,
184 .virt_start = 0xfea00000,
186 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
188 /* MemRegion: feb00000-feb3ffff : 0000:00:01.0 */
190 .phys_start = 0xfeb00000,
191 .virt_start = 0xfeb00000,
193 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
195 /* MemRegion: feb40000-feb5ffff : 0000:00:01.0 */
197 .phys_start = 0xfeb40000,
198 .virt_start = 0xfeb40000,
200 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
202 /* MemRegion: feb60000-feb63fff : ICH HD audio */
204 .phys_start = 0xfeb60000,
205 .virt_start = 0xfeb60000,
207 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
209 /* MemRegion: feb64000-feb67fff : ICH HD audio */
211 .phys_start = 0xfeb64000,
212 .virt_start = 0xfeb64000,
214 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
216 /* MemRegion: feb68000-feb68fff : xhci_hcd */
218 .phys_start = 0xfeb68000,
219 .virt_start = 0xfeb68000,
221 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
223 /* MemRegion: feb6a000-feb6afff : xhci_hcd */
225 .phys_start = 0xfeb6a000,
226 .virt_start = 0xfeb6a000,
228 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
230 /* MemRegion: feb6c000-feb6cfff : ohci_hcd */
232 .phys_start = 0xfeb6c000,
233 .virt_start = 0xfeb6c000,
235 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
237 /* MemRegion: feb6d000-feb6d0ff : ehci_hcd */
239 .phys_start = 0xfeb6d000,
240 .virt_start = 0xfeb6d000,
242 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
244 /* MemRegion: feb6e000-feb6efff : ohci_hcd */
246 .phys_start = 0xfeb6e000,
247 .virt_start = 0xfeb6e000,
249 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
251 /* MemRegion: feb6f000-feb6f0ff : ehci_hcd */
253 .phys_start = 0xfeb6f000,
254 .virt_start = 0xfeb6f000,
256 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
258 /* MemRegion: feb70000-feb70fff : ohci_hcd */
260 .phys_start = 0xfeb70000,
261 .virt_start = 0xfeb70000,
263 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
265 /* MemRegion: feb71000-feb717ff : ahci */
267 .phys_start = 0xfeb71000,
268 .virt_start = 0xfeb71000,
270 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
272 /* MemRegion: feb80000-febfffff : amd_iommu */
274 .phys_start = 0xfeb80000,
275 .virt_start = 0xfeb80000,
277 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
279 /* MemRegion: fed00000-fed003ff : HPET 0 */
281 .phys_start = 0xfed00000,
282 .virt_start = 0xfed00000,
284 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
286 /* MemRegion: fed61000-fed70fff : pnp 00:0a */
288 .phys_start = 0xfed61000,
289 .virt_start = 0xfed61000,
291 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
293 /* MemRegion: 3f000000-3f1fffff : JAILHOUSE Inmate Memory */
295 .phys_start = 0x3f000000,
296 .virt_start = 0x3f000000,
298 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
304 .address = 0xfec00000,
306 .pin_bitmap = 0xffffff,
311 [ 0/8 ... 0x1f/8] = -1,
312 [ 0x20/8 ... 0x27/8] = 0xfc, /* HACK: PIC */
313 [ 0x28/8 ... 0x3f/8] = -1,
314 [ 0x40/8 ... 0x47/8] = 0xf0, /* PIT */
315 [ 0x48/8 ... 0x5f/8] = -1,
316 [ 0x60/8 ... 0x67/8] = 0xec, /* HACK: NMI status/control */
317 [ 0x68/8 ... 0x6f/8] = -1,
318 [ 0x70/8 ... 0x77/8] = 0xfc, /* RTC */
319 [ 0x78/8 ... 0x7f/8] = -1,
320 [ 0x80/8 ... 0x87/8] = 0xfe, /* Port 80 (delays) */
321 [ 0x88/8 ... 0x3af/8] = -1,
322 [ 0x3b0/8 ... 0x3df/8] = 0x00, /* VGA */
323 [ 0x3e0/8 ... 0xcf7/8] = 0, /* HACK: PCI bus */
324 [ 0xcf8/8 ... 0xcff/8] = -1,
325 [ 0xd00/8 ... 0xffff/8] = 0, /* HACK: PCI bus */
329 /* PCIDevice: 00:00.0 */
331 .type = JAILHOUSE_PCI_TYPE_DEVICE,
337 /* PCIDevice: 00:00.2 */
339 .type = JAILHOUSE_PCI_TYPE_DEVICE,
345 /* PCIDevice: 00:01.0 */
347 .type = JAILHOUSE_PCI_TYPE_DEVICE,
353 /* PCIDevice: 00:01.1 */
355 .type = JAILHOUSE_PCI_TYPE_DEVICE,
361 /* PCIDevice: 00:04.0 */
363 .type = JAILHOUSE_PCI_TYPE_BRIDGE,
369 /* PCIDevice: 00:10.0 */
371 .type = JAILHOUSE_PCI_TYPE_DEVICE,
377 /* PCIDevice: 00:10.1 */
379 .type = JAILHOUSE_PCI_TYPE_DEVICE,
385 /* PCIDevice: 00:11.0 */
387 .type = JAILHOUSE_PCI_TYPE_DEVICE,
393 /* PCIDevice: 00:12.0 */
395 .type = JAILHOUSE_PCI_TYPE_DEVICE,
401 /* PCIDevice: 00:12.2 */
403 .type = JAILHOUSE_PCI_TYPE_DEVICE,
409 /* PCIDevice: 00:13.0 */
411 .type = JAILHOUSE_PCI_TYPE_DEVICE,
417 /* PCIDevice: 00:13.2 */
419 .type = JAILHOUSE_PCI_TYPE_DEVICE,
425 /* PCIDevice: 00:14.0 */
427 .type = JAILHOUSE_PCI_TYPE_DEVICE,
433 /* PCIDevice: 00:14.2 */
435 .type = JAILHOUSE_PCI_TYPE_DEVICE,
441 /* PCIDevice: 00:14.3 */
443 .type = JAILHOUSE_PCI_TYPE_DEVICE,
449 /* PCIDevice: 00:14.4 */
451 .type = JAILHOUSE_PCI_TYPE_BRIDGE,
457 /* PCIDevice: 00:14.5 */
459 .type = JAILHOUSE_PCI_TYPE_DEVICE,
465 /* PCIDevice: 00:18.0 */
467 .type = JAILHOUSE_PCI_TYPE_DEVICE,
473 /* PCIDevice: 00:18.1 */
475 .type = JAILHOUSE_PCI_TYPE_DEVICE,
481 /* PCIDevice: 00:18.2 */
483 .type = JAILHOUSE_PCI_TYPE_DEVICE,
489 /* PCIDevice: 00:18.3 */
491 .type = JAILHOUSE_PCI_TYPE_DEVICE,
497 /* PCIDevice: 00:18.4 */
499 .type = JAILHOUSE_PCI_TYPE_DEVICE,
505 /* PCIDevice: 00:18.5 */
507 .type = JAILHOUSE_PCI_TYPE_DEVICE,
513 /* PCIDevice: 01:00.0 */
515 .type = JAILHOUSE_PCI_TYPE_DEVICE,
524 /* PCIDevice: 00:00.2 */
535 .flags = JAILHOUSE_PCICAPS_WRITE,
543 /* PCIDevice: 00:01.0 */
544 /* PCIDevice: 00:01.1 */
549 .flags = JAILHOUSE_PCICAPS_WRITE,
561 .flags = JAILHOUSE_PCICAPS_WRITE,
563 /* PCIDevice: 00:04.0 */
568 .flags = JAILHOUSE_PCICAPS_WRITE,
580 .flags = JAILHOUSE_PCICAPS_WRITE,
594 /* PCIDevice: 00:10.0 */
595 /* PCIDevice: 00:10.1 */
600 .flags = JAILHOUSE_PCICAPS_WRITE,
606 .flags = JAILHOUSE_PCICAPS_WRITE,
612 .flags = JAILHOUSE_PCICAPS_WRITE,
620 /* PCIDevice: 00:11.0 */
625 .flags = JAILHOUSE_PCICAPS_WRITE,
633 /* PCIDevice: 00:12.2 */
634 /* PCIDevice: 00:13.2 */
639 .flags = JAILHOUSE_PCICAPS_WRITE,
647 /* PCIDevice: 00:14.2 */
652 .flags = JAILHOUSE_PCICAPS_WRITE,
654 /* PCIDevice: 00:18.3 */
661 /* PCIDevice: 01:00.0 */
666 .flags = JAILHOUSE_PCICAPS_WRITE,
672 .flags = JAILHOUSE_PCICAPS_WRITE,
684 .flags = JAILHOUSE_PCICAPS_WRITE,