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