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 ASRock IMB-A180 G-Series (4G RAM) board
11 * created with 'jailhouse config create imb-a180.c'
13 * Adjusted by Valentine Sinitsyn <valentine.sinitsyn@gmail.com>
15 * NOTE: This config expects the following to be appended to your kernel cmdline
16 * "memmap=0x4200000$0x3b000000"
19 #include <linux/types.h>
20 #include <jailhouse/cell-config.h>
22 #define ARRAY_SIZE(a) sizeof(a) / sizeof(a[0])
25 struct jailhouse_system header;
27 struct jailhouse_memory mem_regions[42];
28 struct jailhouse_irqchip irqchips[1];
29 __u8 pio_bitmap[0x2000];
30 struct jailhouse_pci_device pci_devices[26];
31 struct jailhouse_pci_capability pci_caps[26];
32 } __attribute__((packed)) config = {
34 .signature = JAILHOUSE_SYSTEM_SIGNATURE,
35 .hypervisor_memory = {
36 .phys_start = 0x3b000000,
42 .platform_info.x86 = {
43 .mmconfig_base = 0xe0000000,
44 .mmconfig_end_bus = 0xff,
45 .pm_timer_address = 0x808,
49 .cpu_set_size = sizeof(config.cpus),
50 .num_memory_regions = ARRAY_SIZE(config.mem_regions),
51 .num_irqchips = ARRAY_SIZE(config.irqchips),
52 .pio_bitmap_size = ARRAY_SIZE(config.pio_bitmap),
53 .num_pci_devices = ARRAY_SIZE(config.pci_devices),
54 .num_pci_caps = ARRAY_SIZE(config.pci_caps),
63 /* MemRegion: 00000000-0009e7ff : System RAM */
68 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
69 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
71 /* MemRegion: 000a0000-000bffff : PCI Bus 0000:00 */
73 .phys_start = 0xa0000,
74 .virt_start = 0xa0000,
76 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
78 /* MemRegion: 000c0000-000ce9ff : Video ROM */
80 .phys_start = 0xc0000,
81 .virt_start = 0xc0000,
83 .flags = JAILHOUSE_MEM_READ,
85 /* MemRegion: 000e0000-000fffff : System ROM */
87 .phys_start = 0xe0000,
88 .virt_start = 0xe0000,
90 .flags = JAILHOUSE_MEM_READ,
92 /* MemRegion: 00100000-3affffff : System RAM */
94 .phys_start = 0x00100000,
95 .virt_start = 0x00100000,
97 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
98 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
100 /* MemRegion: 3f200000-9db10fff : System RAM */
102 .phys_start = 0x3f200000,
103 .virt_start = 0x3f200000,
105 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
106 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
108 /* MemRegion: 9db41000-9dc7ffff : System RAM */
110 .phys_start = 0x9db41000,
111 .virt_start = 0x9db41000,
113 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
114 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
116 /* MemRegion: 9dc80000-9e148fff : ACPI Non-volatile Storage */
118 .phys_start = 0x9dc80000,
119 .virt_start = 0x9dc80000,
121 .flags = JAILHOUSE_MEM_READ,
123 /* MemRegion: 9ede5000-9ede5fff : System RAM */
125 .phys_start = 0x9ede5000,
126 .virt_start = 0x9ede5000,
128 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
129 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
131 /* MemRegion: 9ede6000-9ededfff : ACPI Non-volatile Storage */
133 .phys_start = 0x9ede6000,
134 .virt_start = 0x9ede6000,
136 .flags = JAILHOUSE_MEM_READ,
138 /* MemRegion: 9edee000-9ef42fff : System RAM */
140 .phys_start = 0x9edee000,
141 .virt_start = 0x9edee000,
143 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
144 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
146 /* MemRegion: 9f42d000-9f46ffff : System RAM */
148 .phys_start = 0x9f42d000,
149 .virt_start = 0x9f42d000,
151 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
152 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
154 /* MemRegion: 9f7f1000-9f7fffff : System RAM */
156 .phys_start = 0x9f7f1000,
157 .virt_start = 0x9f7f1000,
159 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
160 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
162 /* MemRegion: 9f800000-9fffffff : RAM buffer */
164 .phys_start = 0x9f800000,
165 .virt_start = 0x9f800000,
167 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
168 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
170 /* MemRegion: a0000000-bfffffff : pnp 00:01 */
172 .phys_start = 0xa0000000,
173 .virt_start = 0xa0000000,
175 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
177 /* MemRegion: c0000000-cfffffff : 0000:00:01.0 */
179 .phys_start = 0xc0000000,
180 .virt_start = 0xc0000000,
182 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
184 /* MemRegion: d0000000-d07fffff : 0000:00:01.0 */
186 .phys_start = 0xd0000000,
187 .virt_start = 0xd0000000,
189 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
191 /* MemRegion: d0800000-d0803fff : r8169 */
193 .phys_start = 0xd0800000,
194 .virt_start = 0xd0800000,
196 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
198 /* MemRegion: d0804000-d0804fff : r8169 */
200 .phys_start = 0xd0804000,
201 .virt_start = 0xd0804000,
203 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
205 /* MemRegion: d0900000-d0903fff : r8169 */
207 .phys_start = 0xd0900000,
208 .virt_start = 0xd0900000,
210 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
212 /* MemRegion: fea00000-fea03fff : 0000:01:00.3 */
214 .phys_start = 0xfea00000,
215 .virt_start = 0xfea00000,
217 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
219 /* MemRegion: fea04000-fea07fff : 0000:01:00.2 */
221 .phys_start = 0xfea04000,
222 .virt_start = 0xfea04000,
224 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
226 /* MemRegion: fea08000-fea0bfff : 0000:01:00.1 */
228 .phys_start = 0xfea08000,
229 .virt_start = 0xfea08000,
231 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
233 /* MemRegion: fea0c000-fea0c0ff : 0000:01:00.3 */
235 .phys_start = 0xfea0c000,
236 .virt_start = 0xfea0c000,
238 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
240 /* MemRegion: fea0d000-fea0dfff : 0000:01:00.2 */
242 .phys_start = 0xfea0d000,
243 .virt_start = 0xfea0d000,
245 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
247 /* MemRegion: fea0e000-fea0efff : 0000:01:00.1 */
249 .phys_start = 0xfea0e000,
250 .virt_start = 0xfea0e000,
252 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
254 /* MemRegion: fea0f000-fea0ffff : r8169 */
256 .phys_start = 0xfea0f000,
257 .virt_start = 0xfea0f000,
259 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
261 /* MemRegion: feb00000-feb3ffff : 0000:00:01.0 */
263 .phys_start = 0xfeb00000,
264 .virt_start = 0xfeb00000,
266 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
268 /* MemRegion: feb40000-feb5ffff : 0000:00:01.0 */
270 .phys_start = 0xfeb40000,
271 .virt_start = 0xfeb40000,
273 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
275 /* MemRegion: feb60000-feb63fff : ICH HD audio */
277 .phys_start = 0xfeb60000,
278 .virt_start = 0xfeb60000,
280 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
282 /* MemRegion: feb64000-feb67fff : ICH HD audio */
284 .phys_start = 0xfeb64000,
285 .virt_start = 0xfeb64000,
287 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
289 /* MemRegion: feb68000-feb69fff : xhci_hcd */
291 .phys_start = 0xfeb68000,
292 .virt_start = 0xfeb68000,
294 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
296 /* MemRegion: feb6a000-feb6a0ff : ehci_hcd */
298 .phys_start = 0xfeb6a000,
299 .virt_start = 0xfeb6a000,
301 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
303 /* MemRegion: feb6b000-feb6bfff : ohci_hcd */
305 .phys_start = 0xfeb6b000,
306 .virt_start = 0xfeb6b000,
308 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
310 /* MemRegion: feb6c000-feb6c0ff : ehci_hcd */
312 .phys_start = 0xfeb6c000,
313 .virt_start = 0xfeb6c000,
315 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
317 /* MemRegion: feb6d000-feb6dfff : ohci_hcd */
319 .phys_start = 0xfeb6d000,
320 .virt_start = 0xfeb6d000,
322 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
324 /* MemRegion: feb6e000-feb6e3ff : ahci */
326 .phys_start = 0xfeb6e000,
327 .virt_start = 0xfeb6e000,
329 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
331 /* MemRegion: fed00000-fed003ff : HPET 0 */
333 .phys_start = 0xfed00000,
334 .virt_start = 0xfed00000,
336 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
338 /* MemRegion: fed61000-fed70fff : pnp 00:0e */
340 .phys_start = 0xfed61000,
341 .virt_start = 0xfed61000,
343 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
345 /* MemRegion: 100001000-13effffff : System RAM */
347 .phys_start = 0x100001000,
348 .virt_start = 0x100001000,
350 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
351 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
353 /* MemRegion: 13f000000-13fffffff : RAM buffer */
355 .phys_start = 0x13f000000,
356 .virt_start = 0x13f000000,
358 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
359 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
361 /* MemRegion: 3f000000-3f1fffff : JAILHOUSE Inmate Memory */
363 .phys_start = 0x3f000000,
364 .virt_start = 0x3f000000,
366 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
372 .address = 0xfec00000,
374 .pin_bitmap = 0xffffff,
379 [ 0/8 ... 0x1f/8] = -1,
380 [ 0x20/8 ... 0x27/8] = 0xfc, /* HACK: PIC */
381 [ 0x28/8 ... 0x3f/8] = -1,
382 [ 0x40/8 ... 0x47/8] = 0xf0, /* PIT */
383 [ 0x48/8 ... 0x5f/8] = -1,
384 [ 0x60/8 ... 0x67/8] = 0xec, /* HACK: NMI status/control */
385 [ 0x68/8 ... 0x6f/8] = -1,
386 [ 0x70/8 ... 0x77/8] = 0xfc, /* RTC */
387 [ 0x78/8 ... 0x7f/8] = -1,
388 [ 0x80/8 ... 0x87/8] = 0xfe, /* Port 80 (delays) */
389 [ 0x88/8 ... 0x3af/8] = -1,
390 [ 0x3b0/8 ... 0x3df/8] = 0x00, /* VGA */
391 [ 0x3e0/8 ... 0xcf7/8] = 0, /* HACK: PCI bus */
392 [ 0xcf8/8 ... 0xcff/8] = -1,
393 [ 0xd00/8 ... 0xffff/8] = 0, /* HACK: PCI bus */
397 /* PCIDevice: 00:00.0 */
399 .type = JAILHOUSE_PCI_TYPE_DEVICE,
405 /* PCIDevice: 00:01.0 */
407 .type = JAILHOUSE_PCI_TYPE_DEVICE,
413 /* PCIDevice: 00:01.1 */
415 .type = JAILHOUSE_PCI_TYPE_DEVICE,
421 /* PCIDevice: 00:02.0 */
423 .type = JAILHOUSE_PCI_TYPE_DEVICE,
429 /* PCIDevice: 00:02.3 */
431 .type = JAILHOUSE_PCI_TYPE_BRIDGE,
437 /* PCIDevice: 00:02.4 */
439 .type = JAILHOUSE_PCI_TYPE_BRIDGE,
445 /* PCIDevice: 00:10.0 */
447 .type = JAILHOUSE_PCI_TYPE_DEVICE,
453 /* PCIDevice: 00:11.0 */
455 .type = JAILHOUSE_PCI_TYPE_DEVICE,
461 /* PCIDevice: 00:12.0 */
463 .type = JAILHOUSE_PCI_TYPE_DEVICE,
469 /* PCIDevice: 00:12.2 */
471 .type = JAILHOUSE_PCI_TYPE_DEVICE,
477 /* PCIDevice: 00:13.0 */
479 .type = JAILHOUSE_PCI_TYPE_DEVICE,
485 /* PCIDevice: 00:13.2 */
487 .type = JAILHOUSE_PCI_TYPE_DEVICE,
493 /* PCIDevice: 00:14.0 */
495 .type = JAILHOUSE_PCI_TYPE_DEVICE,
501 /* PCIDevice: 00:14.2 */
503 .type = JAILHOUSE_PCI_TYPE_DEVICE,
509 /* PCIDevice: 00:14.3 */
511 .type = JAILHOUSE_PCI_TYPE_DEVICE,
517 /* PCIDevice: 00:18.0 */
519 .type = JAILHOUSE_PCI_TYPE_DEVICE,
525 /* PCIDevice: 00:18.1 */
527 .type = JAILHOUSE_PCI_TYPE_DEVICE,
533 /* PCIDevice: 00:18.2 */
535 .type = JAILHOUSE_PCI_TYPE_DEVICE,
541 /* PCIDevice: 00:18.3 */
543 .type = JAILHOUSE_PCI_TYPE_DEVICE,
549 /* PCIDevice: 00:18.4 */
551 .type = JAILHOUSE_PCI_TYPE_DEVICE,
557 /* PCIDevice: 00:18.5 */
559 .type = JAILHOUSE_PCI_TYPE_DEVICE,
565 /* PCIDevice: 01:00.0 */
567 .type = JAILHOUSE_PCI_TYPE_DEVICE,
573 /* PCIDevice: 01:00.1 */
575 .type = JAILHOUSE_PCI_TYPE_DEVICE,
581 /* PCIDevice: 01:00.2 */
583 .type = JAILHOUSE_PCI_TYPE_DEVICE,
589 /* PCIDevice: 01:00.3 */
591 .type = JAILHOUSE_PCI_TYPE_DEVICE,
597 /* PCIDevice: 02:00.0 */
599 .type = JAILHOUSE_PCI_TYPE_DEVICE,
608 /* PCIDevice: 00:01.0 */
609 /* PCIDevice: 00:01.1 */
620 .flags = JAILHOUSE_PCICAPS_WRITE,
632 .flags = JAILHOUSE_PCICAPS_WRITE,
634 /* PCIDevice: 00:02.3 */
635 /* PCIDevice: 00:02.4 */
640 .flags = JAILHOUSE_PCICAPS_WRITE,
652 .flags = JAILHOUSE_PCICAPS_WRITE,
666 /* PCIDevice: 00:10.0 */
671 .flags = JAILHOUSE_PCICAPS_WRITE,
677 .flags = JAILHOUSE_PCICAPS_WRITE,
683 .flags = JAILHOUSE_PCICAPS_WRITE,
691 /* PCIDevice: 00:11.0 */
696 .flags = JAILHOUSE_PCICAPS_WRITE,
708 .flags = JAILHOUSE_PCICAPS_WRITE,
716 /* PCIDevice: 00:12.2 */
717 /* PCIDevice: 00:13.2 */
722 .flags = JAILHOUSE_PCICAPS_WRITE,
730 /* PCIDevice: 00:14.2 */
735 .flags = JAILHOUSE_PCICAPS_WRITE,
737 /* PCIDevice: 00:18.3 */
744 /* PCIDevice: 01:00.0 */
745 /* PCIDevice: 01:00.1 */
746 /* PCIDevice: 01:00.2 */
747 /* PCIDevice: 01:00.3 */
748 /* PCIDevice: 02:00.0 */
753 .flags = JAILHOUSE_PCICAPS_WRITE,
759 .flags = JAILHOUSE_PCICAPS_WRITE,
771 .flags = JAILHOUSE_PCICAPS_WRITE,