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,
39 .platform_info.x86 = {
40 .mmconfig_base = 0xe0000000,
41 .mmconfig_end_bus = 0xff,
42 .pm_timer_address = 0x808,
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-000ce9ff : Video ROM */
77 .phys_start = 0xc0000,
78 .virt_start = 0xc0000,
80 .flags = JAILHOUSE_MEM_READ,
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 = 0x00100000,
92 .virt_start = 0x00100000,
94 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
95 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
97 /* MemRegion: 3f200000-9db10fff : 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: 9db41000-9dc7ffff : System RAM */
107 .phys_start = 0x9db41000,
108 .virt_start = 0x9db41000,
110 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
111 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
113 /* MemRegion: 9dc80000-9e148fff : ACPI Non-volatile Storage */
115 .phys_start = 0x9dc80000,
116 .virt_start = 0x9dc80000,
118 .flags = JAILHOUSE_MEM_READ,
120 /* MemRegion: 9ede5000-9ede5fff : System RAM */
122 .phys_start = 0x9ede5000,
123 .virt_start = 0x9ede5000,
125 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
126 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
128 /* MemRegion: 9ede6000-9ededfff : ACPI Non-volatile Storage */
130 .phys_start = 0x9ede6000,
131 .virt_start = 0x9ede6000,
133 .flags = JAILHOUSE_MEM_READ,
135 /* MemRegion: 9edee000-9ef42fff : System RAM */
137 .phys_start = 0x9edee000,
138 .virt_start = 0x9edee000,
140 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
141 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
143 /* MemRegion: 9f42d000-9f46ffff : System RAM */
145 .phys_start = 0x9f42d000,
146 .virt_start = 0x9f42d000,
148 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
149 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
151 /* MemRegion: 9f7f1000-9f7fffff : System RAM */
153 .phys_start = 0x9f7f1000,
154 .virt_start = 0x9f7f1000,
156 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
157 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
159 /* MemRegion: 9f800000-9fffffff : RAM buffer */
161 .phys_start = 0x9f800000,
162 .virt_start = 0x9f800000,
164 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
165 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
167 /* MemRegion: a0000000-bfffffff : pnp 00:01 */
169 .phys_start = 0xa0000000,
170 .virt_start = 0xa0000000,
172 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
174 /* MemRegion: c0000000-cfffffff : 0000:00:01.0 */
176 .phys_start = 0xc0000000,
177 .virt_start = 0xc0000000,
179 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
181 /* MemRegion: d0000000-d07fffff : 0000:00:01.0 */
183 .phys_start = 0xd0000000,
184 .virt_start = 0xd0000000,
186 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
188 /* MemRegion: d0800000-d0803fff : r8169 */
190 .phys_start = 0xd0800000,
191 .virt_start = 0xd0800000,
193 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
195 /* MemRegion: d0804000-d0804fff : r8169 */
197 .phys_start = 0xd0804000,
198 .virt_start = 0xd0804000,
200 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
202 /* MemRegion: d0900000-d0903fff : r8169 */
204 .phys_start = 0xd0900000,
205 .virt_start = 0xd0900000,
207 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
209 /* MemRegion: fea00000-fea03fff : 0000:01:00.3 */
211 .phys_start = 0xfea00000,
212 .virt_start = 0xfea00000,
214 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
216 /* MemRegion: fea04000-fea07fff : 0000:01:00.2 */
218 .phys_start = 0xfea04000,
219 .virt_start = 0xfea04000,
221 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
223 /* MemRegion: fea08000-fea0bfff : 0000:01:00.1 */
225 .phys_start = 0xfea08000,
226 .virt_start = 0xfea08000,
228 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
230 /* MemRegion: fea0c000-fea0c0ff : 0000:01:00.3 */
232 .phys_start = 0xfea0c000,
233 .virt_start = 0xfea0c000,
235 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
237 /* MemRegion: fea0d000-fea0dfff : 0000:01:00.2 */
239 .phys_start = 0xfea0d000,
240 .virt_start = 0xfea0d000,
242 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
244 /* MemRegion: fea0e000-fea0efff : 0000:01:00.1 */
246 .phys_start = 0xfea0e000,
247 .virt_start = 0xfea0e000,
249 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
251 /* MemRegion: fea0f000-fea0ffff : r8169 */
253 .phys_start = 0xfea0f000,
254 .virt_start = 0xfea0f000,
256 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
258 /* MemRegion: feb00000-feb3ffff : 0000:00:01.0 */
260 .phys_start = 0xfeb00000,
261 .virt_start = 0xfeb00000,
263 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
265 /* MemRegion: feb40000-feb5ffff : 0000:00:01.0 */
267 .phys_start = 0xfeb40000,
268 .virt_start = 0xfeb40000,
270 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
272 /* MemRegion: feb60000-feb63fff : ICH HD audio */
274 .phys_start = 0xfeb60000,
275 .virt_start = 0xfeb60000,
277 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
279 /* MemRegion: feb64000-feb67fff : ICH HD audio */
281 .phys_start = 0xfeb64000,
282 .virt_start = 0xfeb64000,
284 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
286 /* MemRegion: feb68000-feb69fff : xhci_hcd */
288 .phys_start = 0xfeb68000,
289 .virt_start = 0xfeb68000,
291 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
293 /* MemRegion: feb6a000-feb6a0ff : ehci_hcd */
295 .phys_start = 0xfeb6a000,
296 .virt_start = 0xfeb6a000,
298 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
300 /* MemRegion: feb6b000-feb6bfff : ohci_hcd */
302 .phys_start = 0xfeb6b000,
303 .virt_start = 0xfeb6b000,
305 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
307 /* MemRegion: feb6c000-feb6c0ff : ehci_hcd */
309 .phys_start = 0xfeb6c000,
310 .virt_start = 0xfeb6c000,
312 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
314 /* MemRegion: feb6d000-feb6dfff : ohci_hcd */
316 .phys_start = 0xfeb6d000,
317 .virt_start = 0xfeb6d000,
319 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
321 /* MemRegion: feb6e000-feb6e3ff : ahci */
323 .phys_start = 0xfeb6e000,
324 .virt_start = 0xfeb6e000,
326 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
328 /* MemRegion: fed00000-fed003ff : HPET 0 */
330 .phys_start = 0xfed00000,
331 .virt_start = 0xfed00000,
333 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
335 /* MemRegion: fed61000-fed70fff : pnp 00:0e */
337 .phys_start = 0xfed61000,
338 .virt_start = 0xfed61000,
340 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
342 /* MemRegion: 100001000-13effffff : System RAM */
344 .phys_start = 0x100001000,
345 .virt_start = 0x100001000,
347 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
348 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
350 /* MemRegion: 13f000000-13fffffff : RAM buffer */
352 .phys_start = 0x13f000000,
353 .virt_start = 0x13f000000,
355 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
356 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
358 /* MemRegion: 3f000000-3f1fffff : JAILHOUSE Inmate Memory */
360 .phys_start = 0x3f000000,
361 .virt_start = 0x3f000000,
363 .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
369 .address = 0xfec00000,
371 .pin_bitmap = 0xffffff,
376 [ 0/8 ... 0x1f/8] = -1,
377 [ 0x20/8 ... 0x27/8] = 0xfc, /* HACK: PIC */
378 [ 0x28/8 ... 0x3f/8] = -1,
379 [ 0x40/8 ... 0x47/8] = 0xf0, /* PIT */
380 [ 0x48/8 ... 0x5f/8] = -1,
381 [ 0x60/8 ... 0x67/8] = 0xec, /* HACK: NMI status/control */
382 [ 0x68/8 ... 0x6f/8] = -1,
383 [ 0x70/8 ... 0x77/8] = 0xfc, /* RTC */
384 [ 0x78/8 ... 0x7f/8] = -1,
385 [ 0x80/8 ... 0x87/8] = 0xfe, /* Port 80 (delays) */
386 [ 0x88/8 ... 0x3af/8] = -1,
387 [ 0x3b0/8 ... 0x3df/8] = 0x00, /* VGA */
388 [ 0x3e0/8 ... 0xcf7/8] = 0, /* HACK: PCI bus */
389 [ 0xcf8/8 ... 0xcff/8] = -1,
390 [ 0xd00/8 ... 0xffff/8] = 0, /* HACK: PCI bus */
394 /* PCIDevice: 00:00.0 */
396 .type = JAILHOUSE_PCI_TYPE_DEVICE,
402 /* PCIDevice: 00:01.0 */
404 .type = JAILHOUSE_PCI_TYPE_DEVICE,
410 /* PCIDevice: 00:01.1 */
412 .type = JAILHOUSE_PCI_TYPE_DEVICE,
418 /* PCIDevice: 00:02.0 */
420 .type = JAILHOUSE_PCI_TYPE_DEVICE,
426 /* PCIDevice: 00:02.3 */
428 .type = JAILHOUSE_PCI_TYPE_BRIDGE,
434 /* PCIDevice: 00:02.4 */
436 .type = JAILHOUSE_PCI_TYPE_BRIDGE,
442 /* PCIDevice: 00:10.0 */
444 .type = JAILHOUSE_PCI_TYPE_DEVICE,
450 /* PCIDevice: 00:11.0 */
452 .type = JAILHOUSE_PCI_TYPE_DEVICE,
458 /* PCIDevice: 00:12.0 */
460 .type = JAILHOUSE_PCI_TYPE_DEVICE,
466 /* PCIDevice: 00:12.2 */
468 .type = JAILHOUSE_PCI_TYPE_DEVICE,
474 /* PCIDevice: 00:13.0 */
476 .type = JAILHOUSE_PCI_TYPE_DEVICE,
482 /* PCIDevice: 00:13.2 */
484 .type = JAILHOUSE_PCI_TYPE_DEVICE,
490 /* PCIDevice: 00:14.0 */
492 .type = JAILHOUSE_PCI_TYPE_DEVICE,
498 /* PCIDevice: 00:14.2 */
500 .type = JAILHOUSE_PCI_TYPE_DEVICE,
506 /* PCIDevice: 00:14.3 */
508 .type = JAILHOUSE_PCI_TYPE_DEVICE,
514 /* PCIDevice: 00:18.0 */
516 .type = JAILHOUSE_PCI_TYPE_DEVICE,
522 /* PCIDevice: 00:18.1 */
524 .type = JAILHOUSE_PCI_TYPE_DEVICE,
530 /* PCIDevice: 00:18.2 */
532 .type = JAILHOUSE_PCI_TYPE_DEVICE,
538 /* PCIDevice: 00:18.3 */
540 .type = JAILHOUSE_PCI_TYPE_DEVICE,
546 /* PCIDevice: 00:18.4 */
548 .type = JAILHOUSE_PCI_TYPE_DEVICE,
554 /* PCIDevice: 00:18.5 */
556 .type = JAILHOUSE_PCI_TYPE_DEVICE,
562 /* PCIDevice: 01:00.0 */
564 .type = JAILHOUSE_PCI_TYPE_DEVICE,
570 /* PCIDevice: 01:00.1 */
572 .type = JAILHOUSE_PCI_TYPE_DEVICE,
578 /* PCIDevice: 01:00.2 */
580 .type = JAILHOUSE_PCI_TYPE_DEVICE,
586 /* PCIDevice: 01:00.3 */
588 .type = JAILHOUSE_PCI_TYPE_DEVICE,
594 /* PCIDevice: 02:00.0 */
596 .type = JAILHOUSE_PCI_TYPE_DEVICE,
605 /* PCIDevice: 00:01.0 */
606 /* PCIDevice: 00:01.1 */
617 .flags = JAILHOUSE_PCICAPS_WRITE,
629 .flags = JAILHOUSE_PCICAPS_WRITE,
631 /* PCIDevice: 00:02.3 */
632 /* PCIDevice: 00:02.4 */
637 .flags = JAILHOUSE_PCICAPS_WRITE,
649 .flags = JAILHOUSE_PCICAPS_WRITE,
663 /* PCIDevice: 00:10.0 */
668 .flags = JAILHOUSE_PCICAPS_WRITE,
674 .flags = JAILHOUSE_PCICAPS_WRITE,
680 .flags = JAILHOUSE_PCICAPS_WRITE,
688 /* PCIDevice: 00:11.0 */
693 .flags = JAILHOUSE_PCICAPS_WRITE,
705 .flags = JAILHOUSE_PCICAPS_WRITE,
713 /* PCIDevice: 00:12.2 */
714 /* PCIDevice: 00:13.2 */
719 .flags = JAILHOUSE_PCICAPS_WRITE,
727 /* PCIDevice: 00:14.2 */
732 .flags = JAILHOUSE_PCICAPS_WRITE,
734 /* PCIDevice: 00:18.3 */
741 /* PCIDevice: 01:00.0 */
742 /* PCIDevice: 01:00.1 */
743 /* PCIDevice: 01:00.2 */
744 /* PCIDevice: 01:00.3 */
745 /* PCIDevice: 02:00.0 */
750 .flags = JAILHOUSE_PCICAPS_WRITE,
756 .flags = JAILHOUSE_PCICAPS_WRITE,
768 .flags = JAILHOUSE_PCICAPS_WRITE,