]> rtime.felk.cvut.cz Git - jailhouse.git/blob - configs/h87i.c
configs: Prepare h87i for interrupt remapping
[jailhouse.git] / configs / h87i.c
1 /*
2  * Jailhouse, a Linux-based partitioning hypervisor
3  *
4  * Test configuration for Asus H87I-PLUS, 4 GB RAM, 64 MB hypervisor
5  *
6  * Copyright (c) Siemens AG, 2013
7  *
8  * Authors:
9  *  Jan Kiszka <jan.kiszka@siemens.com>
10  *
11  * This work is licensed under the terms of the GNU GPL, version 2.  See
12  * the COPYING file in the top-level directory.
13  */
14
15 #include <linux/types.h>
16 #include <jailhouse/cell-config.h>
17
18 #define ARRAY_SIZE(a) sizeof(a) / sizeof(a[0])
19
20 struct {
21         struct jailhouse_system header;
22         __u64 cpus[1];
23         struct jailhouse_memory mem_regions[9];
24         struct jailhouse_irqchip irqchips[1];
25         __u8 pio_bitmap[0x2000];
26         struct jailhouse_pci_device pci_devices[13];
27         struct jailhouse_pci_capability pci_caps[27];
28 } __attribute__((packed)) config = {
29         .header = {
30                 .hypervisor_memory = {
31                         .phys_start = 0x3c000000,
32                         .size = 0x4000000,
33                 },
34                 .platform_info.x86 = {
35                         .mmconfig_base = 0xf8000000,
36                         .mmconfig_end_bus = 0x3f,
37                         .pm_timer_address = 0x1808,
38                         .dmar_unit_base = {
39                                 0xfed90000,
40                                 0xfed91000,
41                         },
42                 },
43                 .interrupt_limit = 256,
44                 .root_cell = {
45                         .name = "H87I-PLUS",
46
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),
53                 },
54         },
55
56         .cpus = {
57                 0xff,
58         },
59
60         .mem_regions = {
61                 /* RAM */ {
62                         .phys_start = 0x0,
63                         .virt_start = 0x0,
64                         .size = 0x3c000000,
65                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
66                                 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
67                 },
68                 /* RAM */ {
69                         .phys_start = 0x40000000,
70                         .virt_start = 0x40000000,
71                         .size = 0x8ca64000,
72                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
73                                 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
74                 },
75                 /* ACPI */ {
76                         .phys_start = 0xcca63000,
77                         .virt_start = 0xcca63000,
78                         .size = 0x15000,
79                         .flags = JAILHOUSE_MEM_READ,
80                 },
81                 /* RAM */ {
82                         .phys_start = 0xcdfff000,
83                         .virt_start = 0xcdfff000,
84                         .size = 0x1000,
85                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
86                                 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
87                 },
88                 /* RAM */ {
89                         .phys_start = 0xcf200000,
90                         .virt_start = 0xcf200000,
91                         .size = 0x10000000,
92                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
93                                 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
94                 },
95                 /* PCI */ {
96                         .phys_start = 0xdf200000,
97                         .virt_start = 0xdf200000,
98                         .size = 0x18e00000,
99                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
100                 },
101                 /* not safe until we catch MSIs via interrupt remapping */
102                 /* HPET */ {
103                         .phys_start = 0xfed00000,
104                         .virt_start = 0xfed00000,
105                         .size = 0x1000,
106                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
107                 },
108                 /* RAM */ {
109                         .phys_start = 0x100000000,
110                         .virt_start = 0x100000000,
111                         .size = 0x20000000,
112                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
113                                 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
114                 },
115         },
116
117         .irqchips = {
118                 /* IOAPIC */ {
119                         .address = 0xfec00000,
120                         .id = 0xf0f8,
121                         .pin_bitmap = 0xffffff,
122                 },
123         },
124
125         .pio_bitmap = {
126                 [     0/8 ...   0x3f/8] = -1,
127                 [  0x40/8 ...   0x47/8] = 0xf0, /* PIT */
128                 [  0x48/8 ...   0x5f/8] = -1,
129                 [  0x60/8 ...   0x67/8] = 0x0, /* HACK: 8042, and more? */
130                 [  0x68/8 ...   0x6f/8] = -1,
131                 [  0x70/8 ...   0x77/8] = 0xfc, /* rtc */
132                 [  0x78/8 ...  0x3af/8] = -1,
133                 [ 0x3b0/8 ...  0x3df/8] = 0, /* VGA */
134                 [ 0x3e0/8 ...  0xcff/8] = -1,
135                 [ 0xd00/8 ... 0xffff/8] = 0, /* HACK: full PCI */
136         },
137
138         .pci_devices = {
139                 /* PCIDevice: 00:00.0 */
140                 {
141                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
142                         .domain = 0x0,
143                         .bdf = 0x0,
144                         .caps_start = 0,
145                         .num_caps = 1,
146                 },
147                 /* PCIDevice: 00:01.0 */
148                 {
149                         .type = JAILHOUSE_PCI_TYPE_BRIDGE,
150                         .domain = 0x0,
151                         .bdf = 0x8,
152                         .caps_start = 1,
153                         .num_caps = 4,
154                         .num_msi_vectors = 1,
155                 },
156                 /* PCIDevice: 00:02.0 */
157                 {
158                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
159                         .domain = 0x0,
160                         .bdf = 0x10,
161                         .caps_start = 5,
162                         .num_caps = 3,
163                         .num_msi_vectors = 1,
164                 },
165                 /* PCIDevice: 00:03.0 */
166                 {
167                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
168                         .domain = 0x0,
169                         .bdf = 0x18,
170                         .caps_start = 8,
171                         .num_caps = 3,
172                         .num_msi_vectors = 1,
173                 },
174                 /* PCIDevice: 00:14.0 */
175                 {
176                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
177                         .domain = 0x0,
178                         .bdf = 0xa0,
179                         .caps_start = 11,
180                         .num_caps = 2,
181                         .num_msi_vectors = 8,
182                         .msi_64bits = 1,
183                 },
184                 /* PCIDevice: 00:16.0 */
185                 {
186                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
187                         .domain = 0x0,
188                         .bdf = 0xb0,
189                         .caps_start = 13,
190                         .num_caps = 2,
191                         .num_msi_vectors = 1,
192                         .msi_64bits = 1,
193                 },
194                 /* PCIDevice: 00:19.0 */
195                 {
196                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
197                         .domain = 0x0,
198                         .bdf = 0xc8,
199                         .caps_start = 15,
200                         .num_caps = 3,
201                         .num_msi_vectors = 1,
202                         .msi_64bits = 1,
203                 },
204                 /* PCIDevice: 00:1a.0 */
205                 {
206                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
207                         .domain = 0x0,
208                         .bdf = 0xd0,
209                         .caps_start = 18,
210                         .num_caps = 3,
211                 },
212                 /* PCIDevice: 00:1b.0 */
213                 {
214                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
215                         .domain = 0x0,
216                         .bdf = 0xd8,
217                         .caps_start = 21,
218                         .num_caps = 3,
219                         .num_msi_vectors = 1,
220                         .msi_64bits = 1,
221                 },
222                 /* PCIDevice: 00:1d.0 */
223                 {
224                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
225                         .domain = 0x0,
226                         .bdf = 0xe8,
227                         .caps_start = 18,
228                         .num_caps = 3,
229                 },
230                 /* PCIDevice: 00:1f.0 */
231                 {
232                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
233                         .domain = 0x0,
234                         .bdf = 0xf8,
235                         .caps_start = 0,
236                         .num_caps = 1,
237                 },
238                 /* PCIDevice: 00:1f.2 */
239                 {
240                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
241                         .domain = 0x0,
242                         .bdf = 0xfa,
243                         .caps_start = 24,
244                         .num_caps = 3,
245                         .num_msi_vectors = 1,
246                 },
247                 /* PCIDevice: 00:1f.3 */
248                 {
249                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
250                         .domain = 0x0,
251                         .bdf = 0xfb,
252                         .caps_start = 0,
253                         .num_caps = 0,
254                 },
255         },
256
257         .pci_caps = {
258                 /* PCIDevice: 00:00.0 */
259                 /* PCIDevice: 00:1f.0 */
260                 {
261                         .id = 0x9,
262                         .start = 0xe0,
263                         .len = 2,
264                         .flags = 0,
265                 },
266                 /* PCIDevice: 00:01.0 */
267                 {
268                         .id = 0xd,
269                         .start = 0x88,
270                         .len = 2,
271                         .flags = 0,
272                 },
273                 {
274                         .id = 0x1,
275                         .start = 0x80,
276                         .len = 8,
277                         .flags = JAILHOUSE_PCICAPS_WRITE,
278                 },
279                 {
280                         .id = 0x5,
281                         .start = 0x90,
282                         .len = 10,
283                         .flags = JAILHOUSE_PCICAPS_WRITE,
284                 },
285                 {
286                         .id = 0x10,
287                         .start = 0xa0,
288                         .len = 2,
289                         .flags = 0,
290                 },
291                 /* PCIDevice: 00:02.0 */
292                 {
293                         .id = 0x5,
294                         .start = 0x90,
295                         .len = 10,
296                         .flags = JAILHOUSE_PCICAPS_WRITE,
297                 },
298                 {
299                         .id = 0x1,
300                         .start = 0xd0,
301                         .len = 8,
302                         .flags = JAILHOUSE_PCICAPS_WRITE,
303                 },
304                 {
305                         .id = 0x13,
306                         .start = 0xa4,
307                         .len = 2,
308                         .flags = 0,
309                 },
310                 /* PCIDevice: 00:03.0 */
311                 {
312                         .id = 0x1,
313                         .start = 0x50,
314                         .len = 8,
315                         .flags = JAILHOUSE_PCICAPS_WRITE,
316                 },
317                 {
318                         .id = 0x5,
319                         .start = 0x60,
320                         .len = 10,
321                         .flags = JAILHOUSE_PCICAPS_WRITE,
322                 },
323                 {
324                         .id = 0x10,
325                         .start = 0x70,
326                         .len = 2,
327                         .flags = 0,
328                 },
329                 /* PCIDevice: 00:14.0 */
330                 {
331                         .id = 0x1,
332                         .start = 0x70,
333                         .len = 8,
334                         .flags = JAILHOUSE_PCICAPS_WRITE,
335                 },
336                 {
337                         .id = 0x5,
338                         .start = 0x80,
339                         .len = 14,
340                         .flags = JAILHOUSE_PCICAPS_WRITE,
341                 },
342                 /* PCIDevice: 00:16.0 */
343                 {
344                         .id = 0x1,
345                         .start = 0x50,
346                         .len = 8,
347                         .flags = JAILHOUSE_PCICAPS_WRITE,
348                 },
349                 {
350                         .id = 0x5,
351                         .start = 0x8c,
352                         .len = 14,
353                         .flags = JAILHOUSE_PCICAPS_WRITE,
354                 },
355                 /* PCIDevice: 00:19.0 */
356                 {
357                         .id = 0x1,
358                         .start = 0xc8,
359                         .len = 8,
360                         .flags = JAILHOUSE_PCICAPS_WRITE,
361                 },
362                 {
363                         .id = 0x5,
364                         .start = 0xd0,
365                         .len = 14,
366                         .flags = JAILHOUSE_PCICAPS_WRITE,
367                 },
368                 {
369                         .id = 0x13,
370                         .start = 0xe0,
371                         .len = 2,
372                         .flags = 0,
373                 },
374                 /* PCIDevice: 00:1a.0 */
375                 /* PCIDevice: 00:1d.0 */
376                 {
377                         .id = 0x1,
378                         .start = 0x50,
379                         .len = 8,
380                         .flags = JAILHOUSE_PCICAPS_WRITE,
381                 },
382                 {
383                         .id = 0xa,
384                         .start = 0x58,
385                         .len = 2,
386                         .flags = 0,
387                 },
388                 {
389                         .id = 0x13,
390                         .start = 0x98,
391                         .len = 2,
392                         .flags = 0,
393                 },
394                 /* PCIDevice: 00:1b.0 */
395                 {
396                         .id = 0x1,
397                         .start = 0x50,
398                         .len = 8,
399                         .flags = JAILHOUSE_PCICAPS_WRITE,
400                 },
401                 {
402                         .id = 0x5,
403                         .start = 0x60,
404                         .len = 14,
405                         .flags = JAILHOUSE_PCICAPS_WRITE,
406                 },
407                 {
408                         .id = 0x10,
409                         .start = 0x70,
410                         .len = 2,
411                         .flags = 0,
412                 },
413                 /* PCIDevice: 00:1f.2 */
414                 {
415                         .id = 0x5,
416                         .start = 0x80,
417                         .len = 10,
418                         .flags = JAILHOUSE_PCICAPS_WRITE,
419                 },
420                 {
421                         .id = 0x1,
422                         .start = 0x70,
423                         .len = 8,
424                         .flags = JAILHOUSE_PCICAPS_WRITE,
425                 },
426                 {
427                         .id = 0x12,
428                         .start = 0xa8,
429                         .len = 2,
430                         .flags = 0,
431                 },
432         },
433 };