1 | Specifying the cache layout in virtual machines is useful for | 1 | Specifying the cache layout in virtual machines is useful for |
---|---|---|---|
2 | applications and operating systems to fetch accurate information about | 2 | applications and operating systems to fetch accurate information about |
3 | the cache structure and make appropriate adjustments. Enforcing correct | 3 | the cache structure and make appropriate adjustments. Enforcing correct |
4 | sharing information can lead to better optimizations. This patch enables | 4 | sharing information can lead to better optimizations. This patch enables |
5 | the specification of cache layout through a command line parameter, | 5 | the specification of cache layout through a command line parameter, |
6 | building on a patch set by Intel [1,2]. It uses this set as a | 6 | building on a patch set by Intel [1,2,3]. It uses this set as a |
7 | foundation. The device tree and ACPI/PPTT table, and device tree are | 7 | foundation. The device tree and ACPI/PPTT table, and device tree are |
8 | populated based on user-provided information and CPU topology. | 8 | populated based on user-provided information and CPU topology. |
9 | 9 | ||
10 | Example: | 10 | Example: |
11 | 11 | ||
... | ... | ||
88 | Depends-on: i386: Support SMP Cache Topology | 88 | Depends-on: i386: Support SMP Cache Topology |
89 | Depends-on: Msg-id: 20241219083237.265419-1-zhao1.liu@intel.com | 89 | Depends-on: Msg-id: 20241219083237.265419-1-zhao1.liu@intel.com |
90 | 90 | ||
91 | [1] https://lore.kernel.org/kvm/20240908125920.1160236-1-zhao1.liu@intel.com/ | 91 | [1] https://lore.kernel.org/kvm/20240908125920.1160236-1-zhao1.liu@intel.com/ |
92 | [2] https://lore.kernel.org/qemu-devel/20241101083331.340178-1-zhao1.liu@intel.com/ | 92 | [2] https://lore.kernel.org/qemu-devel/20241101083331.340178-1-zhao1.liu@intel.com/ |
93 | [3] https://lore.kernel.org/qemu-devel/20250110145115.1574345-1-zhao1.liu@intel.com/ | ||
93 | 94 | ||
94 | Change Log: | 95 | Change Log: |
96 | v5->v6: | ||
97 | * Minor bug fix. | ||
98 | * rebase based on new Intel patchset. | ||
99 | - https://lore.kernel.org/qemu-devel/20250110145115.1574345-1-zhao1.liu@intel.com/ | ||
95 | v4->v5: | 100 | v4->v5: |
96 | * Added Reviewed-by tags. | 101 | * Added Reviewed-by tags. |
97 | * Applied some comments. | 102 | * Applied some comments. |
98 | 103 | ||
99 | v3->v4: | 104 | v3->v4: |
100 | * Device tree added. | 105 | * Device tree added. |
106 | |||
101 | 107 | ||
102 | Alireza Sanaee (6): | 108 | Alireza Sanaee (6): |
103 | target/arm/tcg: increase cache level for cpu=max | 109 | target/arm/tcg: increase cache level for cpu=max |
104 | arm/virt.c: add cache hierarchy to device tree | 110 | arm/virt.c: add cache hierarchy to device tree |
105 | bios-tables-test: prepare to change ARM ACPI virt PPTT | 111 | bios-tables-test: prepare to change ARM ACPI virt PPTT |
106 | hw/acpi/aml-build.c: add cache hierarchy to pptt table | 112 | hw/acpi/aml-build.c: add cache hierarchy to pptt table |
107 | tests/qtest/bios-table-test: testing new ARM ACPI PPTT topology | 113 | tests/qtest/bios-table-test: testing new ARM ACPI PPTT topology |
108 | Update the ACPI tables according to the acpi aml_build change, also | 114 | Update the ACPI tables according to the acpi aml_build change, also |
109 | empty bios-tables-test-allowed-diff.h. | 115 | empty bios-tables-test-allowed-diff.h. |
110 | 116 | ||
111 | hw/acpi/aml-build.c | 235 +++++++++++- | 117 | Yicong Yang (1): |
112 | hw/arm/virt-acpi-build.c | 8 +- | 118 | tests: virt: Update expected ACPI tables for virt test |
113 | hw/arm/virt.c | 394 +++++++++++++++++++++ | 119 | |
114 | hw/cpu/core.c | 92 +++++ | 120 | hw/acpi/aml-build.c | 205 +++++++++- |
115 | include/hw/acpi/aml-build.h | 4 +- | 121 | hw/arm/virt-acpi-build.c | 8 +- |
116 | include/hw/arm/virt.h | 4 + | 122 | hw/arm/virt.c | 349 ++++++++++++++++++ |
117 | include/hw/cpu/core.h | 27 ++ | 123 | hw/cpu/core.c | 92 +++++ |
118 | target/arm/tcg/cpu64.c | 13 + | 124 | include/hw/acpi/aml-build.h | 4 +- |
119 | tests/data/acpi/aarch64/virt/PPTT.topology | Bin 356 -> 540 bytes | 125 | include/hw/arm/virt.h | 4 + |
120 | tests/qtest/bios-tables-test.c | 4 + | 126 | include/hw/cpu/core.h | 27 ++ |
121 | 10 files changed, 773 insertions(+), 8 deletions(-) | 127 | target/arm/tcg/cpu64.c | 13 + |
128 | tests/data/acpi/aarch64/virt/PPTT | Bin 76 -> 96 bytes | ||
129 | .../data/acpi/aarch64/virt/PPTT.acpihmatvirt | Bin 156 -> 176 bytes | ||
130 | tests/data/acpi/aarch64/virt/PPTT.topology | Bin 336 -> 540 bytes | ||
131 | tests/qtest/bios-tables-test.c | 4 + | ||
132 | 12 files changed, 699 insertions(+), 7 deletions(-) | ||
122 | 133 | ||
123 | -- | 134 | -- |
124 | 2.34.1 | 135 | 2.34.1 | diff view generated by jsdifflib |
New patch | |||
---|---|---|---|
1 | From: Yicong Yang <yangyicong@hisilicon.com> | ||
1 | 2 | ||
3 | Update the ACPI tables according to the acpi aml_build change, also | ||
4 | empty bios-tables-test-allowed-diff.h. | ||
5 | |||
6 | The disassembled differences between actual and expected PPTT shows | ||
7 | below. Only about the root node adding and identification flag set | ||
8 | as expected. | ||
9 | /* | ||
10 | * Intel ACPI Component Architecture | ||
11 | * AML/ASL+ Disassembler version 20210604 (64-bit version) | ||
12 | * Copyright (c) 2000 - 2021 Intel Corporation | ||
13 | * | ||
14 | - * Disassembly of tests/data/acpi/aarch64/virt/PPTT, Thu Sep 26 08:54:39 2024 | ||
15 | + * Disassembly of /tmp/aml-QNEIU2, Thu Sep 26 08:54:39 2024 | ||
16 | * | ||
17 | * ACPI Data Table [PPTT] | ||
18 | * | ||
19 | * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue | ||
20 | */ | ||
21 | |||
22 | [000h 0000 4] Signature : "PPTT" [Processor Properties Topology Table] | ||
23 | -[004h 0004 4] Table Length : 0000004C | ||
24 | -[008h 0008 1] Revision : 02 | ||
25 | -[009h 0009 1] Checksum : A8 | ||
26 | +[004h 0004 4] Table Length : 00000060 | ||
27 | +[008h 0008 1] Revision : 03 | ||
28 | +[009h 0009 1] Checksum : 26 | ||
29 | [00Ah 0010 6] Oem ID : "BOCHS " | ||
30 | [010h 0016 8] Oem Table ID : "BXPC " | ||
31 | [018h 0024 4] Oem Revision : 00000001 | ||
32 | [01Ch 0028 4] Asl Compiler ID : "BXPC" | ||
33 | [020h 0032 4] Asl Compiler Revision : 00000001 | ||
34 | |||
35 | [024h 0036 1] Subtable Type : 00 [Processor Hierarchy Node] | ||
36 | [025h 0037 1] Length : 14 | ||
37 | [026h 0038 2] Reserved : 0000 | ||
38 | -[028h 0040 4] Flags (decoded below) : 00000001 | ||
39 | +[028h 0040 4] Flags (decoded below) : 00000011 | ||
40 | Physical package : 1 | ||
41 | ACPI Processor ID valid : 0 | ||
42 | Processor is a thread : 0 | ||
43 | Node is a leaf : 0 | ||
44 | - Identical Implementation : 0 | ||
45 | + Identical Implementation : 1 | ||
46 | [02Ch 0044 4] Parent : 00000000 | ||
47 | [030h 0048 4] ACPI Processor ID : 00000000 | ||
48 | [034h 0052 4] Private Resource Number : 00000000 | ||
49 | |||
50 | [038h 0056 1] Subtable Type : 00 [Processor Hierarchy Node] | ||
51 | [039h 0057 1] Length : 14 | ||
52 | [03Ah 0058 2] Reserved : 0000 | ||
53 | -[03Ch 0060 4] Flags (decoded below) : 0000000A | ||
54 | +[03Ch 0060 4] Flags (decoded below) : 00000011 | ||
55 | + Physical package : 1 | ||
56 | + ACPI Processor ID valid : 0 | ||
57 | + Processor is a thread : 0 | ||
58 | + Node is a leaf : 0 | ||
59 | + Identical Implementation : 1 | ||
60 | +[040h 0064 4] Parent : 00000024 | ||
61 | +[044h 0068 4] ACPI Processor ID : 00000000 | ||
62 | +[048h 0072 4] Private Resource Number : 00000000 | ||
63 | + | ||
64 | +[04Ch 0076 1] Subtable Type : 00 [Processor Hierarchy Node] | ||
65 | +[04Dh 0077 1] Length : 14 | ||
66 | +[04Eh 0078 2] Reserved : 0000 | ||
67 | +[050h 0080 4] Flags (decoded below) : 0000000A | ||
68 | Physical package : 0 | ||
69 | ACPI Processor ID valid : 1 | ||
70 | Processor is a thread : 0 | ||
71 | Node is a leaf : 1 | ||
72 | Identical Implementation : 0 | ||
73 | -[040h 0064 4] Parent : 00000024 | ||
74 | -[044h 0068 4] ACPI Processor ID : 00000000 | ||
75 | -[048h 0072 4] Private Resource Number : 00000000 | ||
76 | +[054h 0084 4] Parent : 00000038 | ||
77 | +[058h 0088 4] ACPI Processor ID : 00000000 | ||
78 | +[05Ch 0092 4] Private Resource Number : 00000000 | ||
79 | |||
80 | -Raw Table Data: Length 76 (0x4C) | ||
81 | +Raw Table Data: Length 96 (0x60) | ||
82 | |||
83 | - 0000: 50 50 54 54 4C 00 00 00 02 A8 42 4F 43 48 53 20 // PPTTL.....BOCHS | ||
84 | + 0000: 50 50 54 54 60 00 00 00 03 26 42 4F 43 48 53 20 // PPTT`....&BOCHS | ||
85 | 0010: 42 58 50 43 20 20 20 20 01 00 00 00 42 58 50 43 // BXPC ....BXPC | ||
86 | - 0020: 01 00 00 00 00 14 00 00 01 00 00 00 00 00 00 00 // ................ | ||
87 | - 0030: 00 00 00 00 00 00 00 00 00 14 00 00 0A 00 00 00 // ................ | ||
88 | - 0040: 24 00 00 00 00 00 00 00 00 00 00 00 // $........... | ||
89 | + 0020: 01 00 00 00 00 14 00 00 11 00 00 00 00 00 00 00 // ................ | ||
90 | + 0030: 00 00 00 00 00 00 00 00 00 14 00 00 11 00 00 00 // ................ | ||
91 | + 0040: 24 00 00 00 00 00 00 00 00 00 00 00 00 14 00 00 // $............... | ||
92 | + 0050: 0A 00 00 00 38 00 00 00 00 00 00 00 00 00 00 00 // ....8........... | ||
93 | |||
94 | Signed-off-by: Yicong Yang <yangyicong@hisilicon.com> | ||
95 | --- | ||
96 | tests/data/acpi/aarch64/virt/PPTT | Bin 76 -> 96 bytes | ||
97 | tests/data/acpi/aarch64/virt/PPTT.acpihmatvirt | Bin 156 -> 176 bytes | ||
98 | tests/data/acpi/aarch64/virt/PPTT.topology | Bin 336 -> 356 bytes | ||
99 | 3 files changed, 0 insertions(+), 0 deletions(-) | ||
100 | |||
101 | diff --git a/tests/data/acpi/aarch64/virt/PPTT b/tests/data/acpi/aarch64/virt/PPTT | ||
102 | index XXXXXXX..XXXXXXX 100644 | ||
103 | GIT binary patch | ||
104 | literal 96 | ||
105 | zcmWFt2nk7GU|?WYbMklg2v%^42yj*a0!E-1hz+6{L>L$ZK{PUeim9N9aRK=jNMZmJ | ||
106 | Cw+8_L | ||
107 | |||
108 | delta 38 | ||
109 | kcmYfB;R*-{3GrcIU|?D?kxP!15y)bg=qSvi0%AY`0D`Lo$p8QV | ||
110 | |||
111 | diff --git a/tests/data/acpi/aarch64/virt/PPTT.acpihmatvirt b/tests/data/acpi/aarch64/virt/PPTT.acpihmatvirt | ||
112 | index XXXXXXX..XXXXXXX 100644 | ||
113 | GIT binary patch | ||
114 | literal 176 | ||
115 | zcmWFt2npH1z`(%F<K*w`5v<@85#X!<1dKp25F11@h%hh+f@ov_6;nYI;{x(6aEO7; | ||
116 | b0?8riMHU0;EdgRCkQxvGs)LC!Lqr$=th)&T | ||
117 | |||
118 | literal 156 | ||
119 | zcmWFt2nm_Pz`(%t&&l7}BUr&HBEVSz2pEB4AU23*5Mf{d(;zks0L8d~Y!w(EL?em8 | ||
120 | b)g$Re76a)`0AeN}1_P+x1R#eQBEkRwWK9VH | ||
121 | |||
122 | diff --git a/tests/data/acpi/aarch64/virt/PPTT.topology b/tests/data/acpi/aarch64/virt/PPTT.topology | ||
123 | index XXXXXXX..XXXXXXX 100644 | ||
124 | GIT binary patch | ||
125 | literal 356 | ||
126 | zcmWFt2nk7HWME*P=H&0}5v<@85#X!<1VAAM5F11@h%hh+f@ov_6;nYI69Dopu!#Af | ||
127 | ziSYsX2{^>Sc7o)9c7V(S=|vU;>74__Oh60<Ky@%NW+X9~TafjF#BRXUfM}@RH$Wx} | ||
128 | cOdLs!6-f-H7uh_Jy&6CPHY9a0F?OgJ00?*x0RR91 | ||
129 | |||
130 | literal 336 | ||
131 | zcmWFt2nh*bWME*baq@Te2v%^42yj*a0-z8Bhz+6{L>L&rG>8oYKrs+dflv?<DrSKu | ||
132 | z#s}p4;1GkGi=-D>45YUMh?!vef$Csl%t&G&Cde(wdO>1GKm-gx_1*yTS+Iz)B8h>R | ||
133 | aAic=uf$S9l3b27BK>%tVNQ@mK!T<mOd=3Es | ||
134 | |||
135 | -- | ||
136 | 2.34.1 | diff view generated by jsdifflib |
1 | This patch addresses cache description in the `aarch64_max_tcg_initfn` | 1 | This patch addresses cache description in the `aarch64_max_tcg_initfn` |
---|---|---|---|
2 | function for cpu=max. It introduces three layers of caches and modifies | 2 | function for cpu=max. It introduces three layers of caches and modifies |
3 | the cache description registers accordingly. | 3 | the cache description registers accordingly. |
4 | 4 | ||
5 | Signed-off-by: Alireza Sanaee <alireza.sanaee@huawei.com> | 5 | Signed-off-by: Alireza Sanaee <alireza.sanaee@huawei.com> |
6 | Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> | 6 | Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> |
7 | --- | 7 | --- |
8 | target/arm/tcg/cpu64.c | 13 +++++++++++++ | 8 | target/arm/tcg/cpu64.c | 13 +++++++++++++ |
9 | 1 file changed, 13 insertions(+) | 9 | 1 file changed, 13 insertions(+) |
10 | 10 | ||
11 | diff --git a/target/arm/tcg/cpu64.c b/target/arm/tcg/cpu64.c | 11 | diff --git a/target/arm/tcg/cpu64.c b/target/arm/tcg/cpu64.c |
12 | index XXXXXXX..XXXXXXX 100644 | 12 | index XXXXXXX..XXXXXXX 100644 |
13 | --- a/target/arm/tcg/cpu64.c | 13 | --- a/target/arm/tcg/cpu64.c |
14 | +++ b/target/arm/tcg/cpu64.c | 14 | +++ b/target/arm/tcg/cpu64.c |
15 | @@ -XXX,XX +XXX,XX @@ void aarch64_max_tcg_initfn(Object *obj) | 15 | @@ -XXX,XX +XXX,XX @@ void aarch64_max_tcg_initfn(Object *obj) |
16 | uint64_t t; | 16 | uint64_t t; |
17 | uint32_t u; | 17 | uint32_t u; |
18 | 18 | ||
19 | + /* | 19 | + /* |
20 | + * Expanded cache set | 20 | + * Expanded cache set |
21 | + */ | 21 | + */ |
22 | + cpu->clidr = 0x8200123; /* 4 4 3 in 3 bit fields */ | 22 | + cpu->clidr = 0x8200123; /* 4 4 3 in 3 bit fields */ |
23 | + /* 64KB L1 dcache */ | 23 | + /* 64KB L1 dcache */ |
24 | + cpu->ccsidr[0] = make_ccsidr(CCSIDR_FORMAT_LEGACY, 4, 64, 64 * KiB, 7); | 24 | + cpu->ccsidr[0] = make_ccsidr(CCSIDR_FORMAT_LEGACY, 4, 64, 64 * KiB, 7); |
25 | + /* 64KB L1 icache */ | 25 | + /* 64KB L1 icache */ |
26 | + cpu->ccsidr[1] = make_ccsidr(CCSIDR_FORMAT_LEGACY, 4, 64, 64 * KiB, 2); | 26 | + cpu->ccsidr[1] = make_ccsidr(CCSIDR_FORMAT_LEGACY, 4, 64, 64 * KiB, 2); |
27 | + /* 1MB L2 unified cache */ | 27 | + /* 1MB L2 unified cache */ |
28 | + cpu->ccsidr[2] = make_ccsidr(CCSIDR_FORMAT_LEGACY, 8, 64, 1 * MiB, 7); | 28 | + cpu->ccsidr[2] = make_ccsidr(CCSIDR_FORMAT_LEGACY, 8, 64, 1 * MiB, 7); |
29 | + /* 2MB L3 unified cache */ | 29 | + /* 2MB L3 unified cache */ |
30 | + cpu->ccsidr[4] = make_ccsidr(CCSIDR_FORMAT_LEGACY, 8, 64, 2 * MiB, 7); | 30 | + cpu->ccsidr[4] = make_ccsidr(CCSIDR_FORMAT_LEGACY, 8, 64, 2 * MiB, 7); |
31 | + | 31 | + |
32 | /* | 32 | /* |
33 | * Unset ARM_FEATURE_BACKCOMPAT_CNTFRQ, which we would otherwise default | 33 | * Unset ARM_FEATURE_BACKCOMPAT_CNTFRQ, which we would otherwise default |
34 | * to because we started with aarch64_a57_initfn(). A 'max' CPU might | 34 | * to because we started with aarch64_a57_initfn(). A 'max' CPU might |
35 | -- | 35 | -- |
36 | 2.34.1 | 36 | 2.34.1 | diff view generated by jsdifflib |
... | ... | ||
---|---|---|---|
38 | 38 | ||
39 | Signed-off-by: Alireza Sanaee <alireza.sanaee@huawei.com> | 39 | Signed-off-by: Alireza Sanaee <alireza.sanaee@huawei.com> |
40 | Co-developed-by: Jonathan Cameron <jonathan.cameron@huawei.com> | 40 | Co-developed-by: Jonathan Cameron <jonathan.cameron@huawei.com> |
41 | Signed-off-by: Jonathan Cameron <jonathan.cameron@huawei.com> | 41 | Signed-off-by: Jonathan Cameron <jonathan.cameron@huawei.com> |
42 | --- | 42 | --- |
43 | hw/arm/virt.c | 394 ++++++++++++++++++++++++++++++++++++++++++ | 43 | hw/arm/virt.c | 349 ++++++++++++++++++++++++++++++++++++++++++ |
44 | hw/cpu/core.c | 92 ++++++++++ | 44 | hw/cpu/core.c | 92 +++++++++++ |
45 | include/hw/arm/virt.h | 4 + | 45 | include/hw/arm/virt.h | 4 + |
46 | include/hw/cpu/core.h | 26 +++ | 46 | include/hw/cpu/core.h | 26 ++++ |
47 | 4 files changed, 516 insertions(+) | 47 | 4 files changed, 471 insertions(+) |
48 | 48 | ||
49 | diff --git a/hw/arm/virt.c b/hw/arm/virt.c | 49 | diff --git a/hw/arm/virt.c b/hw/arm/virt.c |
50 | index XXXXXXX..XXXXXXX 100644 | 50 | index XXXXXXX..XXXXXXX 100644 |
51 | --- a/hw/arm/virt.c | 51 | --- a/hw/arm/virt.c |
52 | +++ b/hw/arm/virt.c | 52 | +++ b/hw/arm/virt.c |
53 | @@ -XXX,XX +XXX,XX @@ static const int a15irqmap[] = { | 53 | @@ -XXX,XX +XXX,XX @@ static const int a15irqmap[] = { |
54 | [VIRT_PLATFORM_BUS] = 112, /* ...to 112 + PLATFORM_BUS_NUM_IRQS -1 */ | 54 | [VIRT_PLATFORM_BUS] = 112, /* ...to 112 + PLATFORM_BUS_NUM_IRQS -1 */ |
55 | }; | 55 | }; |
56 | 56 | ||
57 | +unsigned int virt_get_caches(const VirtMachineState *vms, | 57 | +unsigned int virt_get_caches(const VirtMachineState *vms, |
58 | + CPUCaches *caches) | 58 | + PPTTCPUCaches *caches) |
59 | +{ | 59 | +{ |
60 | + ARMCPU *armcpu = ARM_CPU(qemu_get_cpu(0)); /* assume homogeneous CPUs */ | 60 | + ARMCPU *armcpu = ARM_CPU(qemu_get_cpu(0)); /* assume homogeneous CPUs */ |
61 | + bool ccidx = cpu_isar_feature(any_ccidx, armcpu); | 61 | + bool ccidx = cpu_isar_feature(any_ccidx, armcpu); |
62 | + unsigned int num_cache, i; | 62 | + unsigned int num_cache, i; |
63 | + int level_instr = 1, level_data = 1; | 63 | + int level_instr = 1, level_data = 1; |
64 | + | 64 | + |
65 | + for (i = 0, num_cache = 0; i < CPU_MAX_CACHES; i++, num_cache++) { | 65 | + for (i = 0, num_cache = 0; i < CPU_MAX_CACHES; i++, num_cache++) { |
66 | + int type = (armcpu->clidr >> (3 * i)) & 7; | 66 | + int type = (armcpu->clidr >> (3 * i)) & 7; |
67 | + int bank_index; | 67 | + int bank_index; |
68 | + int level; | 68 | + int level; |
69 | + CPUCacheType cache_type; | 69 | + PPTTCPUCacheType cache_type; |
70 | + | 70 | + |
71 | + if (type == 0) { | 71 | + if (type == 0) { |
72 | + break; | 72 | + break; |
73 | + } | 73 | + } |
74 | + | 74 | + |
... | ... | ||
98 | + * an instruction cache. Unified caches use the same storage | 98 | + * an instruction cache. Unified caches use the same storage |
99 | + * as data caches. | 99 | + * as data caches. |
100 | + */ | 100 | + */ |
101 | + bank_index = (i * 2) | ((type == 1) ? 1 : 0); | 101 | + bank_index = (i * 2) | ((type == 1) ? 1 : 0); |
102 | + if (ccidx) { | 102 | + if (ccidx) { |
103 | + caches[num_cache] = (CPUCaches) { | 103 | + caches[num_cache] = (PPTTCPUCaches) { |
104 | + .type = cache_type, | 104 | + .type = cache_type, |
105 | + .level = level, | 105 | + .level = level, |
106 | + .linesize = 1 << (FIELD_EX64(armcpu->ccsidr[bank_index], | 106 | + .linesize = 1 << (FIELD_EX64(armcpu->ccsidr[bank_index], |
107 | + CCSIDR_EL1, | 107 | + CCSIDR_EL1, |
108 | + CCIDX_LINESIZE) + 4), | 108 | + CCIDX_LINESIZE) + 4), |
... | ... | ||
111 | + CCIDX_ASSOCIATIVITY) + 1, | 111 | + CCIDX_ASSOCIATIVITY) + 1, |
112 | + .sets = FIELD_EX64(armcpu->ccsidr[bank_index], CCSIDR_EL1, | 112 | + .sets = FIELD_EX64(armcpu->ccsidr[bank_index], CCSIDR_EL1, |
113 | + CCIDX_NUMSETS) + 1, | 113 | + CCIDX_NUMSETS) + 1, |
114 | + }; | 114 | + }; |
115 | + } else { | 115 | + } else { |
116 | + caches[num_cache] = (CPUCaches) { | 116 | + caches[num_cache] = (PPTTCPUCaches) { |
117 | + .type = cache_type, | 117 | + .type = cache_type, |
118 | + .level = level, | 118 | + .level = level, |
119 | + .linesize = 1 << (FIELD_EX64(armcpu->ccsidr[bank_index], | 119 | + .linesize = 1 << (FIELD_EX64(armcpu->ccsidr[bank_index], |
120 | + CCSIDR_EL1, LINESIZE) + 4), | 120 | + CCSIDR_EL1, LINESIZE) + 4), |
121 | + .associativity = FIELD_EX64(armcpu->ccsidr[bank_index], | 121 | + .associativity = FIELD_EX64(armcpu->ccsidr[bank_index], |
... | ... | ||
132 | + if (type == 3) { | 132 | + if (type == 3) { |
133 | + num_cache++; | 133 | + num_cache++; |
134 | + bank_index = (i * 2) | 1; | 134 | + bank_index = (i * 2) | 1; |
135 | + if (ccidx) { | 135 | + if (ccidx) { |
136 | + /* Instruction cache: bottom bit set when reading banked reg */ | 136 | + /* Instruction cache: bottom bit set when reading banked reg */ |
137 | + caches[num_cache] = (CPUCaches) { | 137 | + caches[num_cache] = (PPTTCPUCaches) { |
138 | + .type = INSTRUCTION, | 138 | + .type = INSTRUCTION, |
139 | + .level = level_instr, | 139 | + .level = level_instr, |
140 | + .linesize = 1 << (FIELD_EX64(armcpu->ccsidr[bank_index], | 140 | + .linesize = 1 << (FIELD_EX64(armcpu->ccsidr[bank_index], |
141 | + CCSIDR_EL1, | 141 | + CCSIDR_EL1, |
142 | + CCIDX_LINESIZE) + 4), | 142 | + CCIDX_LINESIZE) + 4), |
... | ... | ||
145 | + CCIDX_ASSOCIATIVITY) + 1, | 145 | + CCIDX_ASSOCIATIVITY) + 1, |
146 | + .sets = FIELD_EX64(armcpu->ccsidr[bank_index], CCSIDR_EL1, | 146 | + .sets = FIELD_EX64(armcpu->ccsidr[bank_index], CCSIDR_EL1, |
147 | + CCIDX_NUMSETS) + 1, | 147 | + CCIDX_NUMSETS) + 1, |
148 | + }; | 148 | + }; |
149 | + } else { | 149 | + } else { |
150 | + caches[num_cache] = (CPUCaches) { | 150 | + caches[num_cache] = (PPTTCPUCaches) { |
151 | + .type = INSTRUCTION, | 151 | + .type = INSTRUCTION, |
152 | + .level = level_instr, | 152 | + .level = level_instr, |
153 | + .linesize = 1 << (FIELD_EX64(armcpu->ccsidr[bank_index], | 153 | + .linesize = 1 << (FIELD_EX64(armcpu->ccsidr[bank_index], |
154 | + CCSIDR_EL1, LINESIZE) + 4), | 154 | + CCSIDR_EL1, LINESIZE) + 4), |
155 | + .associativity = FIELD_EX64(armcpu->ccsidr[bank_index], | 155 | + .associativity = FIELD_EX64(armcpu->ccsidr[bank_index], |
... | ... | ||
185 | struct { | 185 | struct { |
186 | @@ -XXX,XX +XXX,XX @@ static void fdt_add_timer_nodes(const VirtMachineState *vms) | 186 | @@ -XXX,XX +XXX,XX @@ static void fdt_add_timer_nodes(const VirtMachineState *vms) |
187 | } | 187 | } |
188 | } | 188 | } |
189 | 189 | ||
190 | +static void add_cache_node(void *fdt, char * nodepath, CPUCaches cache, | 190 | +static void add_cache_node(void *fdt, char * nodepath, PPTTCPUCaches cache, |
191 | + uint32_t *next_level) { | 191 | + uint32_t *next_level) { |
192 | + /* Assume L2/3 are unified caches. */ | 192 | + /* Assume L2/3 are unified caches. */ |
193 | + | 193 | + |
194 | + uint32_t phandle; | 194 | + uint32_t phandle; |
195 | + | 195 | + |
... | ... | ||
207 | + } | 207 | + } |
208 | + | 208 | + |
209 | + *next_level = phandle; | 209 | + *next_level = phandle; |
210 | +} | 210 | +} |
211 | + | 211 | + |
212 | +static bool add_cpu_cache_hierarchy(void *fdt, CPUCaches* cache, | 212 | +static bool add_cpu_cache_hierarchy(void *fdt, PPTTCPUCaches* cache, |
213 | + uint32_t cache_cnt, | 213 | + uint32_t cache_cnt, |
214 | + uint32_t top_level, | 214 | + uint32_t top_level, |
215 | + uint32_t bottom_level, | 215 | + uint32_t bottom_level, |
216 | + uint32_t cpu_id, | 216 | + uint32_t cpu_id, |
217 | + uint32_t *next_level) { | 217 | + uint32_t *next_level) { |
... | ... | ||
235 | + | 235 | + |
236 | + return found_cache; | 236 | + return found_cache; |
237 | +} | 237 | +} |
238 | + | 238 | + |
239 | +static void set_cache_properties(void *fdt, const char *nodename, | 239 | +static void set_cache_properties(void *fdt, const char *nodename, |
240 | + const char *prefix, CPUCaches cache) | 240 | + const char *prefix, PPTTCPUCaches cache) |
241 | +{ | 241 | +{ |
242 | + char prop_name[64]; | 242 | + char prop_name[64]; |
243 | + | 243 | + |
244 | + snprintf(prop_name, sizeof(prop_name), "%s-block-size", prefix); | 244 | + snprintf(prop_name, sizeof(prop_name), "%s-block-size", prefix); |
245 | + qemu_fdt_setprop_cell(fdt, nodename, prop_name, cache.linesize); | 245 | + qemu_fdt_setprop_cell(fdt, nodename, prop_name, cache.linesize); |
... | ... | ||
257 | int addr_cells = 1; | 257 | int addr_cells = 1; |
258 | const MachineState *ms = MACHINE(vms); | 258 | const MachineState *ms = MACHINE(vms); |
259 | + const MachineClass *mc = MACHINE_GET_CLASS(ms); | 259 | + const MachineClass *mc = MACHINE_GET_CLASS(ms); |
260 | const VirtMachineClass *vmc = VIRT_MACHINE_GET_CLASS(vms); | 260 | const VirtMachineClass *vmc = VIRT_MACHINE_GET_CLASS(vms); |
261 | int smp_cpus = ms->smp.cpus; | 261 | int smp_cpus = ms->smp.cpus; |
262 | + int socket_id, cluster_id, core_id, thread_id; | 262 | + int socket_id, cluster_id, core_id; |
263 | + uint32_t next_level = 0; | 263 | + uint32_t next_level = 0; |
264 | + uint32_t socket_offset = 0, cluster_offset = 0, core_offset = 0; | 264 | + uint32_t socket_offset = 0, cluster_offset = 0, core_offset = 0; |
265 | + uint32_t thread_offset = 0; | 265 | + int last_socket = -1, last_cluster = -1, last_core = -1; |
266 | + int last_socket = -1, last_cluster = -1, last_core = -1, last_thread = -1; | 266 | + int top_node = 3, top_cluster = 3, top_core = 3; |
267 | + int top_node = 3, top_cluster = 3, top_core = 3, top_thread = 3; | 267 | + int bottom_node = 3, bottom_cluster = 3, bottom_core = 3; |
268 | + int bottom_node = 3, bottom_cluster = 3, bottom_core = 3, bottom_thread = 3; | ||
269 | + unsigned int num_cache; | 268 | + unsigned int num_cache; |
270 | + CPUCaches caches[16]; | 269 | + PPTTCPUCaches caches[16]; |
271 | + bool cache_created = false; | 270 | + bool cache_created = false; |
272 | + | 271 | + |
273 | + num_cache = virt_get_caches(vms, caches); | 272 | + num_cache = virt_get_caches(vms, caches); |
274 | + | 273 | + |
275 | + if (mc->smp_props.has_caches && | 274 | + if (mc->smp_props.has_caches && |
... | ... | ||
285 | 284 | ||
286 | for (cpu = smp_cpus - 1; cpu >= 0; cpu--) { | 285 | for (cpu = smp_cpus - 1; cpu >= 0; cpu--) { |
287 | + socket_id = cpu / (ms->smp.clusters * ms->smp.cores * ms->smp.threads); | 286 | + socket_id = cpu / (ms->smp.clusters * ms->smp.cores * ms->smp.threads); |
288 | + cluster_id = cpu / (ms->smp.cores * ms->smp.threads) % ms->smp.clusters; | 287 | + cluster_id = cpu / (ms->smp.cores * ms->smp.threads) % ms->smp.clusters; |
289 | + core_id = cpu / (ms->smp.threads) % ms->smp.cores; | 288 | + core_id = cpu / (ms->smp.threads) % ms->smp.cores; |
290 | + thread_id = cpu % ms->smp.cores; | ||
291 | + | 289 | + |
292 | char *nodename = g_strdup_printf("/cpus/cpu@%d", cpu); | 290 | char *nodename = g_strdup_printf("/cpus/cpu@%d", cpu); |
293 | ARMCPU *armcpu = ARM_CPU(qemu_get_cpu(cpu)); | 291 | ARMCPU *armcpu = ARM_CPU(qemu_get_cpu(cpu)); |
294 | CPUState *cs = CPU(armcpu); | 292 | CPUState *cs = CPU(armcpu); |
295 | + const char *prefix = NULL; | 293 | + const char *prefix = NULL; |
... | ... | ||
336 | + CPU_TOPOLOGY_LEVEL_SOCKET)) { | 334 | + CPU_TOPOLOGY_LEVEL_SOCKET)) { |
337 | + | 335 | + |
338 | + if (bottom_node == 1) { | 336 | + if (bottom_node == 1) { |
339 | + error_report( | 337 | + error_report( |
340 | + "Cannot share L1 at socket_id %d. DT limiation on " | 338 | + "Cannot share L1 at socket_id %d. DT limiation on " |
341 | + "sharing at cache level = 1", | 339 | + "sharing at cache level = 1", |
342 | + socket_id); | 340 | + socket_id); |
343 | + } | 341 | + } |
344 | + | 342 | + |
345 | + cache_created = add_cpu_cache_hierarchy(ms->fdt, caches, | 343 | + cache_created = add_cpu_cache_hierarchy(ms->fdt, caches, |
346 | + num_cache, | 344 | + num_cache, |
... | ... | ||
388 | + top_cluster, bottom_cluster); | 386 | + top_cluster, bottom_cluster); |
389 | + return; | 387 | + return; |
390 | + } | 388 | + } |
391 | + | 389 | + |
392 | + top_core = bottom_cluster - 1; | 390 | + top_core = bottom_cluster - 1; |
393 | + top_thread = top_core; | ||
394 | + } else if (top_cluster == bottom_node - 1) { | 391 | + } else if (top_cluster == bottom_node - 1) { |
395 | + top_core = bottom_node - 1; | 392 | + top_core = bottom_node - 1; |
396 | + top_thread = top_core; | ||
397 | + } | 393 | + } |
398 | + | 394 | + |
399 | + last_cluster = cluster_id; | 395 | + last_cluster = cluster_id; |
400 | + } | 396 | + } |
401 | + | 397 | + |
... | ... | ||
422 | + "Core: No caches at levels %d-%d", | 418 | + "Core: No caches at levels %d-%d", |
423 | + top_core, bottom_core); | 419 | + top_core, bottom_core); |
424 | + return; | 420 | + return; |
425 | + } | 421 | + } |
426 | + } | 422 | + } |
427 | + | 423 | + } |
428 | + top_thread = bottom_core - 1; | ||
429 | + } else if (top_cluster == bottom_node - 1) { | ||
430 | + /* socket cache but no cluster cache and no core cache */ | ||
431 | + top_thread = top_cluster; | ||
432 | + } else if (top_core == bottom_cluster - 1) { | ||
433 | + /* cluster cache but no socket and no core cache */ | ||
434 | + top_thread = top_core; | ||
435 | + } | ||
436 | + | 424 | + |
437 | + last_core = core_id; | 425 | + last_core = core_id; |
438 | + } | 426 | + } |
439 | + | 427 | + |
440 | + if (ms->smp.threads > 1) { | 428 | + next_level = core_offset; |
441 | + thread_offset = core_offset; | ||
442 | + if (thread_id != last_thread) { | ||
443 | + bottom_thread = top_thread; | ||
444 | + if (cache_described_at(ms, CPU_TOPOLOGY_LEVEL_THREAD) && | ||
445 | + find_the_lowest_level_cache_defined_at_level(ms, | ||
446 | + &bottom_thread, | ||
447 | + CPU_TOPOLOGY_LEVEL_THREAD)) { | ||
448 | + | ||
449 | + if (bottom_thread == 1) { | ||
450 | + bottom_thread++; | ||
451 | + } else { | ||
452 | + cache_created = add_cpu_cache_hierarchy(ms->fdt, | ||
453 | + caches, | ||
454 | + num_cache, | ||
455 | + top_thread, | ||
456 | + bottom_thread, | ||
457 | + cpu, | ||
458 | + &thread_offset); | ||
459 | + | ||
460 | + if (!cache_created) { | ||
461 | + error_setg(&error_fatal, | ||
462 | + "No caches at levels %d-%d", | ||
463 | + top_thread, bottom_thread); | ||
464 | + return; | ||
465 | + } | ||
466 | + } | ||
467 | + } | ||
468 | + | ||
469 | + last_thread = thread_id; | ||
470 | + } | ||
471 | + } | ||
472 | + | ||
473 | + next_level = (ms->smp.threads > 1) ? thread_offset : core_offset; | ||
474 | + qemu_fdt_setprop_cell(ms->fdt, nodename, "next-level-cache", | 429 | + qemu_fdt_setprop_cell(ms->fdt, nodename, "next-level-cache", |
475 | + next_level); | 430 | + next_level); |
476 | + | 431 | + |
477 | g_free(nodename); | 432 | g_free(nodename); |
478 | } | 433 | } |
... | ... | ||
506 | + return true; | 461 | + return true; |
507 | + } | 462 | + } |
508 | + return false; | 463 | + return false; |
509 | +} | 464 | +} |
510 | + | 465 | + |
511 | +int partial_cache_description(const MachineState *ms, CPUCaches *caches, | 466 | +int partial_cache_description(const MachineState *ms, PPTTCPUCaches *caches, |
512 | + int num_caches) | 467 | + int num_caches) |
513 | +{ | 468 | +{ |
514 | + int level, c; | 469 | + int level, c; |
515 | + | 470 | + |
516 | + for (level = 1; level < num_caches; level++) { | 471 | + for (level = 1; level < num_caches; level++) { |
... | ... | ||
523 | + case 1: | 478 | + case 1: |
524 | + /* | 479 | + /* |
525 | + * L1 cache is assumed to have both L1I and L1D available. | 480 | + * L1 cache is assumed to have both L1I and L1D available. |
526 | + * Technically both need to be checked. | 481 | + * Technically both need to be checked. |
527 | + */ | 482 | + */ |
528 | + if (machine_get_cache_topo_level(ms, | 483 | + if (machine_get_cache_topo_level(ms, |
529 | + CACHE_LEVEL_AND_TYPE_L1I) == | 484 | + CACHE_LEVEL_AND_TYPE_L1I) == |
530 | + CPU_TOPOLOGY_LEVEL_DEFAULT) { | 485 | + CPU_TOPOLOGY_LEVEL_DEFAULT) { |
531 | + return level; | 486 | + return level; |
532 | + } | 487 | + } |
533 | + break; | 488 | + break; |
... | ... | ||
613 | VIRT_MEM, | 568 | VIRT_MEM, |
614 | @@ -XXX,XX +XXX,XX @@ OBJECT_DECLARE_TYPE(VirtMachineState, VirtMachineClass, VIRT_MACHINE) | 569 | @@ -XXX,XX +XXX,XX @@ OBJECT_DECLARE_TYPE(VirtMachineState, VirtMachineClass, VIRT_MACHINE) |
615 | 570 | ||
616 | void virt_acpi_setup(VirtMachineState *vms); | 571 | void virt_acpi_setup(VirtMachineState *vms); |
617 | bool virt_is_acpi_enabled(VirtMachineState *vms); | 572 | bool virt_is_acpi_enabled(VirtMachineState *vms); |
618 | +unsigned int virt_get_caches(const VirtMachineState *vms, CPUCaches *caches); | 573 | +unsigned int virt_get_caches(const VirtMachineState *vms, PPTTCPUCaches *caches); |
619 | 574 | ||
620 | /* Return number of redistributors that fit in the specified region */ | 575 | /* Return number of redistributors that fit in the specified region */ |
621 | static uint32_t virt_redist_capacity(VirtMachineState *vms, int region) | 576 | static uint32_t virt_redist_capacity(VirtMachineState *vms, int region) |
622 | diff --git a/include/hw/cpu/core.h b/include/hw/cpu/core.h | 577 | diff --git a/include/hw/cpu/core.h b/include/hw/cpu/core.h |
623 | index XXXXXXX..XXXXXXX 100644 | 578 | index XXXXXXX..XXXXXXX 100644 |
... | ... | ||
629 | 584 | ||
630 | +typedef enum CPUCacheType { | 585 | +typedef enum CPUCacheType { |
631 | + DATA, | 586 | + DATA, |
632 | + INSTRUCTION, | 587 | + INSTRUCTION, |
633 | + UNIFIED, | 588 | + UNIFIED, |
634 | +} CPUCacheType; | 589 | +} PPTTCPUCacheType; |
635 | + | 590 | + |
636 | +typedef struct CPUCaches { | 591 | +typedef struct PPTTCPUCaches { |
637 | + CPUCacheType type; | 592 | + PPTTCPUCacheType type; |
638 | + uint32_t pptt_id; | 593 | + uint32_t pptt_id; |
639 | + uint32_t sets; | 594 | + uint32_t sets; |
640 | + uint32_t size; | 595 | + uint32_t size; |
641 | + uint32_t level; | 596 | + uint32_t level; |
642 | + uint16_t linesize; | 597 | + uint16_t linesize; |
643 | + uint8_t attributes; /* write policy: 0x0 write back, 0x1 write through */ | 598 | + uint8_t attributes; /* write policy: 0x0 write back, 0x1 write through */ |
644 | + uint8_t associativity; | 599 | + uint8_t associativity; |
645 | +} CPUCaches; | 600 | +} PPTTCPUCaches; |
646 | + | 601 | + |
647 | +int partial_cache_description(const MachineState *ms, CPUCaches *caches, | 602 | +int partial_cache_description(const MachineState *ms, PPTTCPUCaches *caches, |
648 | + int num_caches); | 603 | + int num_caches); |
649 | + | 604 | + |
650 | +bool cache_described_at(const MachineState *ms, CpuTopologyLevel level); | 605 | +bool cache_described_at(const MachineState *ms, CpuTopologyLevel level); |
651 | + | 606 | + |
652 | +bool find_the_lowest_level_cache_defined_at_level(const MachineState *ms, | 607 | +bool find_the_lowest_level_cache_defined_at_level(const MachineState *ms, |
... | ... | diff view generated by jsdifflib |
1 | Prepare to update `build_pptt` function to add cache description | 1 | Prepare to update `build_pptt` function to add cache description |
---|---|---|---|
2 | functionalities, thus add binaries in this patch. | 2 | functionalities, thus add binaries in this patch. |
3 | 3 | ||
4 | Signed-off-by: Alireza Sanaee <alireza.sanaee@huawei.com> | 4 | Signed-off-by: Alireza Sanaee <alireza.sanaee@huawei.com> |
5 | --- | 5 | --- |
6 | tests/qtest/bios-tables-test-allowed-diff.h | 1 + | 6 | tests/qtest/bios-tables-test-allowed-diff.h | 1 + |
7 | 1 file changed, 1 insertion(+) | 7 | 1 file changed, 1 insertion(+) |
8 | 8 | ||
9 | diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios-tables-test-allowed-diff.h | 9 | diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios-tables-test-allowed-diff.h |
10 | index XXXXXXX..XXXXXXX 100644 | 10 | index XXXXXXX..XXXXXXX 100644 |
11 | --- a/tests/qtest/bios-tables-test-allowed-diff.h | 11 | --- a/tests/qtest/bios-tables-test-allowed-diff.h |
12 | +++ b/tests/qtest/bios-tables-test-allowed-diff.h | 12 | +++ b/tests/qtest/bios-tables-test-allowed-diff.h |
13 | @@ -1 +1,2 @@ | 13 | @@ -1 +1,2 @@ |
14 | /* List of comma-separated changed AML files to ignore */ | 14 | /* List of comma-separated changed AML files to ignore */ |
15 | +"tests/data/acpi/aarch64/virt/PPTT.topology", | 15 | +"tests/data/acpi/aarch64/virt/PPTT.topology", |
16 | -- | 16 | -- |
17 | 2.34.1 | 17 | 2.34.1 | diff view generated by jsdifflib |
... | ... | ||
---|---|---|---|
4 | 4 | ||
5 | Signed-off-by: Alireza Sanaee <alireza.sanaee@huawei.com> | 5 | Signed-off-by: Alireza Sanaee <alireza.sanaee@huawei.com> |
6 | Co-developed-by: Jonathan Cameron <jonathan.cameron@huawei.com> | 6 | Co-developed-by: Jonathan Cameron <jonathan.cameron@huawei.com> |
7 | Signed-off-by: Jonathan Cameron <jonathan.cameron@huawei.com> | 7 | Signed-off-by: Jonathan Cameron <jonathan.cameron@huawei.com> |
8 | --- | 8 | --- |
9 | hw/acpi/aml-build.c | 235 +++++++++++++++++++++++++++++++++++- | 9 | hw/acpi/aml-build.c | 205 +++++++++++++++++++++++++++++++++++- |
10 | hw/arm/virt-acpi-build.c | 8 +- | 10 | hw/arm/virt-acpi-build.c | 8 +- |
11 | include/hw/acpi/aml-build.h | 4 +- | 11 | include/hw/acpi/aml-build.h | 4 +- |
12 | include/hw/cpu/core.h | 1 + | 12 | include/hw/cpu/core.h | 1 + |
13 | 4 files changed, 240 insertions(+), 8 deletions(-) | 13 | 4 files changed, 211 insertions(+), 7 deletions(-) |
14 | 14 | ||
15 | diff --git a/hw/acpi/aml-build.c b/hw/acpi/aml-build.c | 15 | diff --git a/hw/acpi/aml-build.c b/hw/acpi/aml-build.c |
16 | index XXXXXXX..XXXXXXX 100644 | 16 | index XXXXXXX..XXXXXXX 100644 |
17 | --- a/hw/acpi/aml-build.c | 17 | --- a/hw/acpi/aml-build.c |
18 | +++ b/hw/acpi/aml-build.c | 18 | +++ b/hw/acpi/aml-build.c |
19 | @@ -XXX,XX +XXX,XX @@ void build_slit(GArray *table_data, BIOSLinker *linker, MachineState *ms, | 19 | @@ -XXX,XX +XXX,XX @@ void build_slit(GArray *table_data, BIOSLinker *linker, MachineState *ms, |
20 | acpi_table_end(linker, &table); | 20 | acpi_table_end(linker, &table); |
21 | } | 21 | } |
22 | 22 | ||
23 | +static void build_cache_nodes(GArray *tbl, CPUCaches *cache, | 23 | +static void build_cache_nodes(GArray *tbl, PPTTCPUCaches *cache, |
24 | + uint32_t next_offset, unsigned int id) | 24 | + uint32_t next_offset, unsigned int id) |
25 | +{ | 25 | +{ |
26 | + int val; | 26 | + int val; |
27 | + | 27 | + |
28 | + /* Type 1 - cache */ | 28 | + /* Type 1 - cache */ |
... | ... | ||
63 | + * systems' registers, and fills up the table. Then it updates the | 63 | + * systems' registers, and fills up the table. Then it updates the |
64 | + * `data_offset` and `instr_offset` parameters with the offset of the data | 64 | + * `data_offset` and `instr_offset` parameters with the offset of the data |
65 | + * and instruction caches of the lowest level, respectively. | 65 | + * and instruction caches of the lowest level, respectively. |
66 | + */ | 66 | + */ |
67 | +static bool build_caches(GArray *table_data, uint32_t pptt_start, | 67 | +static bool build_caches(GArray *table_data, uint32_t pptt_start, |
68 | + int num_caches, CPUCaches *caches, | 68 | + int num_caches, PPTTCPUCaches *caches, |
69 | + int base_id, | 69 | + int base_id, |
70 | + uint8_t level_high, /* Inclusive */ | 70 | + uint8_t level_high, /* Inclusive */ |
71 | + uint8_t level_low, /* Inclusive */ | 71 | + uint8_t level_low, /* Inclusive */ |
72 | + uint32_t *data_offset, | 72 | + uint32_t *data_offset, |
73 | + uint32_t *instr_offset) | 73 | + uint32_t *instr_offset) |
... | ... | ||
128 | * 5.2.29 Processor Properties Topology Table (PPTT) | 128 | * 5.2.29 Processor Properties Topology Table (PPTT) |
129 | */ | 129 | */ |
130 | void build_pptt(GArray *table_data, BIOSLinker *linker, MachineState *ms, | 130 | void build_pptt(GArray *table_data, BIOSLinker *linker, MachineState *ms, |
131 | - const char *oem_id, const char *oem_table_id) | 131 | - const char *oem_id, const char *oem_table_id) |
132 | + const char *oem_id, const char *oem_table_id, | 132 | + const char *oem_id, const char *oem_table_id, |
133 | + int num_caches, CPUCaches *caches) | 133 | + int num_caches, PPTTCPUCaches *caches) |
134 | { | 134 | { |
135 | MachineClass *mc = MACHINE_GET_CLASS(ms); | 135 | MachineClass *mc = MACHINE_GET_CLASS(ms); |
136 | CPUArchIdList *cpus = ms->possible_cpus; | 136 | CPUArchIdList *cpus = ms->possible_cpus; |
137 | + uint32_t thread_instr_offset = 0, thread_data_offset = 0; | ||
138 | + uint32_t core_data_offset = 0, core_instr_offset = 0; | 137 | + uint32_t core_data_offset = 0, core_instr_offset = 0; |
139 | + uint32_t cluster_instr_offset = 0, cluster_data_offset = 0; | 138 | + uint32_t cluster_instr_offset = 0, cluster_data_offset = 0; |
140 | + uint32_t node_data_offset = 0, node_instr_offset = 0; | 139 | + uint32_t node_data_offset = 0, node_instr_offset = 0; |
141 | + int top_node = 3, top_cluster = 3, top_core = 3, top_thread = 3; | 140 | + int top_node = 3, top_cluster = 3, top_core = 3; |
142 | + int bottom_node = 3, bottom_cluster = 3, bottom_core = 3, bottom_thread = 3; | 141 | + int bottom_node = 3, bottom_cluster = 3, bottom_core = 3; |
143 | int64_t socket_id = -1, cluster_id = -1, core_id = -1; | 142 | int64_t socket_id = -1, cluster_id = -1, core_id = -1; |
144 | uint32_t socket_offset = 0, cluster_offset = 0, core_offset = 0; | 143 | uint32_t socket_offset = 0, cluster_offset = 0, core_offset = 0; |
145 | uint32_t pptt_start = table_data->len; | 144 | uint32_t pptt_start = table_data->len; |
146 | uint32_t root_offset; | 145 | uint32_t root_offset; |
147 | int n; | 146 | int n; |
... | ... | ||
217 | + | 216 | + |
218 | + top_core = bottom_cluster - 1; | 217 | + top_core = bottom_cluster - 1; |
219 | + } else if (top_cluster == bottom_node - 1) { | 218 | + } else if (top_cluster == bottom_node - 1) { |
220 | + /* socket cache but no cluster cache */ | 219 | + /* socket cache but no cluster cache */ |
221 | + top_core = bottom_node - 1; | 220 | + top_core = bottom_node - 1; |
222 | + } | 221 | + } |
223 | + | 222 | + |
224 | cluster_offset = table_data->len - pptt_start; | 223 | cluster_offset = table_data->len - pptt_start; |
225 | build_processor_hierarchy_node(table_data, | 224 | build_processor_hierarchy_node(table_data, |
226 | (0 << 0) | /* Not a physical package */ | 225 | (0 << 0) | /* Not a physical package */ |
227 | (1 << 4), /* Identical Implementation */ | 226 | (1 << 4), /* Identical Implementation */ |
... | ... | ||
256 | + | 255 | + |
257 | + priv_rsrc[0] = core_instr_offset; | 256 | + priv_rsrc[0] = core_instr_offset; |
258 | + priv_rsrc[1] = core_data_offset; | 257 | + priv_rsrc[1] = core_data_offset; |
259 | + | 258 | + |
260 | + num_priv = core_instr_offset == core_data_offset ? 1 : 2; | 259 | + num_priv = core_instr_offset == core_data_offset ? 1 : 2; |
261 | + | ||
262 | + top_thread = bottom_core - 1; | ||
263 | + } else if (top_cluster == bottom_node - 1) { | ||
264 | + /* socket cache but no cluster cache and no core cache */ | ||
265 | + top_thread = top_cluster; | ||
266 | + } else if (top_core == bottom_cluster - 1) { | ||
267 | + /* cluster cache but no socket and no core cache */ | ||
268 | + top_thread = top_core; | ||
269 | + } | 260 | + } |
270 | + } | 261 | + } |
271 | + | 262 | + |
272 | + | 263 | + |
273 | if (ms->smp.threads == 1) { | 264 | if (ms->smp.threads == 1) { |
... | ... | ||
285 | (0 << 0) | /* Not a physical package */ | 276 | (0 << 0) | /* Not a physical package */ |
286 | (1 << 4), /* Identical Implementation */ | 277 | (1 << 4), /* Identical Implementation */ |
287 | - cluster_offset, core_id, NULL, 0); | 278 | - cluster_offset, core_id, NULL, 0); |
288 | + cluster_offset, core_id, | 279 | + cluster_offset, core_id, |
289 | + priv_rsrc, num_priv); | 280 | + priv_rsrc, num_priv); |
290 | + } | ||
291 | + | ||
292 | + num_priv = 0; | ||
293 | + bottom_thread = top_thread; | ||
294 | + if (cache_described_at(ms, CPU_TOPOLOGY_LEVEL_THREAD) && | ||
295 | + find_the_lowest_level_cache_defined_at_level( | ||
296 | + ms, | ||
297 | + &bottom_thread, | ||
298 | + CPU_TOPOLOGY_LEVEL_THREAD)) | ||
299 | + { | ||
300 | + build_caches(table_data, pptt_start, | ||
301 | + num_caches, caches, | ||
302 | + n, top_thread, bottom_thread, | ||
303 | + &thread_data_offset, &thread_instr_offset); | ||
304 | + | ||
305 | + priv_rsrc[0] = thread_instr_offset; | ||
306 | + priv_rsrc[1] = thread_data_offset; | ||
307 | + | ||
308 | + num_priv = thread_instr_offset == thread_data_offset ? 1 : 2; | ||
309 | } | 281 | } |
310 | 282 | ||
311 | build_processor_hierarchy_node(table_data, | 283 | build_processor_hierarchy_node(table_data, |
312 | (1 << 1) | /* ACPI Processor ID valid */ | ||
313 | (1 << 2) | /* Processor is a Thread */ | ||
314 | (1 << 3), /* Node is a Leaf */ | ||
315 | - core_offset, n, NULL, 0); | ||
316 | + core_offset, n, priv_rsrc, num_priv); | ||
317 | } | ||
318 | } | ||
319 | |||
320 | diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c | 284 | diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c |
321 | index XXXXXXX..XXXXXXX 100644 | 285 | index XXXXXXX..XXXXXXX 100644 |
322 | --- a/hw/arm/virt-acpi-build.c | 286 | --- a/hw/arm/virt-acpi-build.c |
323 | +++ b/hw/arm/virt-acpi-build.c | 287 | +++ b/hw/arm/virt-acpi-build.c |
324 | @@ -XXX,XX +XXX,XX @@ void virt_acpi_build(VirtMachineState *vms, AcpiBuildTables *tables) | 288 | @@ -XXX,XX +XXX,XX @@ void virt_acpi_build(VirtMachineState *vms, AcpiBuildTables *tables) |
325 | GArray *tables_blob = tables->table_data; | 289 | GArray *tables_blob = tables->table_data; |
326 | MachineState *ms = MACHINE(vms); | 290 | MachineState *ms = MACHINE(vms); |
327 | 291 | ||
328 | + CPUCaches caches[CPU_MAX_CACHES]; /* Can select up to 16 */ | 292 | + PPTTCPUCaches caches[CPU_MAX_CACHES]; /* Can select up to 16 */ |
329 | + unsigned int num_caches; | 293 | + unsigned int num_caches; |
330 | + | 294 | + |
331 | + num_caches = virt_get_caches(vms, caches); | 295 | + num_caches = virt_get_caches(vms, caches); |
332 | + | 296 | + |
333 | table_offsets = g_array_new(false, true /* clear */, | 297 | table_offsets = g_array_new(false, true /* clear */, |
... | ... | ||
359 | const char *oem_id, const char *oem_table_id); | 323 | const char *oem_id, const char *oem_table_id); |
360 | 324 | ||
361 | void build_pptt(GArray *table_data, BIOSLinker *linker, MachineState *ms, | 325 | void build_pptt(GArray *table_data, BIOSLinker *linker, MachineState *ms, |
362 | - const char *oem_id, const char *oem_table_id); | 326 | - const char *oem_id, const char *oem_table_id); |
363 | + const char *oem_id, const char *oem_table_id, | 327 | + const char *oem_id, const char *oem_table_id, |
364 | + int num_caches, CPUCaches *caches); | 328 | + int num_caches, PPTTCPUCaches *caches); |
365 | 329 | ||
366 | void build_fadt(GArray *tbl, BIOSLinker *linker, const AcpiFadtData *f, | 330 | void build_fadt(GArray *tbl, BIOSLinker *linker, const AcpiFadtData *f, |
367 | const char *oem_id, const char *oem_table_id); | 331 | const char *oem_id, const char *oem_table_id); |
368 | diff --git a/include/hw/cpu/core.h b/include/hw/cpu/core.h | 332 | diff --git a/include/hw/cpu/core.h b/include/hw/cpu/core.h |
369 | index XXXXXXX..XXXXXXX 100644 | 333 | index XXXXXXX..XXXXXXX 100644 |
... | ... | diff view generated by jsdifflib |
1 | Test new PPTT topolopy with cache representation. | 1 | Test new PPTT topolopy with cache representation. |
---|---|---|---|
2 | 2 | ||
3 | Signed-off-by: Alireza Sanaee <alireza.sanaee@huawei.com> | 3 | Signed-off-by: Alireza Sanaee <alireza.sanaee@huawei.com> |
4 | Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> | 4 | Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> |
5 | --- | 5 | --- |
6 | tests/qtest/bios-tables-test.c | 4 ++++ | 6 | tests/qtest/bios-tables-test.c | 4 ++++ |
7 | 1 file changed, 4 insertions(+) | 7 | 1 file changed, 4 insertions(+) |
8 | 8 | ||
9 | diff --git a/tests/qtest/bios-tables-test.c b/tests/qtest/bios-tables-test.c | 9 | diff --git a/tests/qtest/bios-tables-test.c b/tests/qtest/bios-tables-test.c |
10 | index XXXXXXX..XXXXXXX 100644 | 10 | index XXXXXXX..XXXXXXX 100644 |
11 | --- a/tests/qtest/bios-tables-test.c | 11 | --- a/tests/qtest/bios-tables-test.c |
12 | +++ b/tests/qtest/bios-tables-test.c | 12 | +++ b/tests/qtest/bios-tables-test.c |
13 | @@ -XXX,XX +XXX,XX @@ static void test_acpi_aarch64_virt_tcg_topology(void) | 13 | @@ -XXX,XX +XXX,XX @@ static void test_acpi_aarch64_virt_tcg_topology(void) |
14 | }; | 14 | }; |
15 | 15 | ||
16 | test_acpi_one("-cpu cortex-a57 " | 16 | test_acpi_one("-cpu cortex-a57 " |
17 | + "-M virt,smp-cache.0.cache=l1i,smp-cache.0.topology=cluster," | 17 | + "-M virt,smp-cache.0.cache=l1i,smp-cache.0.topology=cluster," |
18 | + "smp-cache.1.cache=l1d,smp-cache.1.topology=cluster," | 18 | + "smp-cache.1.cache=l1d,smp-cache.1.topology=cluster," |
19 | + "smp-cache.2.cache=l2,smp-cache.2.topology=cluster," | 19 | + "smp-cache.2.cache=l2,smp-cache.2.topology=cluster," |
20 | + "smp-cache.3.cache=l3,smp-cache.3.topology=cluster " | 20 | + "smp-cache.3.cache=l3,smp-cache.3.topology=cluster " |
21 | "-smp sockets=1,clusters=2,cores=2,threads=2", &data); | 21 | "-smp sockets=1,clusters=2,cores=2,threads=2", &data); |
22 | free_test_data(&data); | 22 | free_test_data(&data); |
23 | } | 23 | } |
24 | -- | 24 | -- |
25 | 2.34.1 | 25 | 2.34.1 | diff view generated by jsdifflib |
1 | The disassembled differences between actual and expected PPTT based on | 1 | The disassembled differences between actual and expected PPTT based on |
---|---|---|---|
2 | the following cache topology representation: | 2 | the following cache topology representation: |
3 | 3 | ||
4 | - l1d and l1i shared at cluster level | 4 | - l1d and l1i shared at cluster level |
5 | - l2 shared at cluster level | 5 | - l2 shared at cluster level |
6 | - l3 shared at cluster level | 6 | - l3 shared at cluster level |
7 | 7 | ||
8 | /* | 8 | /* |
9 | * Intel ACPI Component Architecture | 9 | * Intel ACPI Component Architecture |
10 | * AML/ASL+ Disassembler version 20200925 (64-bit version) | 10 | * AML/ASL+ Disassembler version 20200925 (64-bit version) |
11 | * Copyright (c) 2000 - 2020 Intel Corporation | 11 | * Copyright (c) 2000 - 2020 Intel Corporation |
12 | * | 12 | * |
13 | * Disassembly of ../../../tests/data/acpi/aarch64/virt/PPTT.topology, Mon Oct 7 16:57:29 2024 | 13 | * Disassembly of ../../../tests/data/acpi/aarch64/virt/PPTT.topology, Mon Oct 7 16:57:29 2024 |
14 | * | 14 | * |
15 | * ACPI Data Table [PPTT] | 15 | * ACPI Data Table [PPTT] |
16 | * | 16 | * |
17 | * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue | 17 | * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue |
18 | */ | 18 | */ |
19 | 19 | ||
20 | [000h 0000 4] Signature : "PPTT" [Processor Properties Topology Table] | 20 | [000h 0000 4] Signature : "PPTT" [Processor Properties Topology Table] |
21 | [004h 0004 4] Table Length : 0000021C | 21 | [004h 0004 4] Table Length : 0000021C |
22 | [008h 0008 1] Revision : 03 | 22 | [008h 0008 1] Revision : 03 |
23 | [009h 0009 1] Checksum : 4D | 23 | [009h 0009 1] Checksum : 4D |
24 | [00Ah 0010 6] Oem ID : "BOCHS " | 24 | [00Ah 0010 6] Oem ID : "BOCHS " |
25 | [010h 0016 8] Oem Table ID : "BXPC " | 25 | [010h 0016 8] Oem Table ID : "BXPC " |
26 | [018h 0024 4] Oem Revision : 00000001 | 26 | [018h 0024 4] Oem Revision : 00000001 |
27 | [01Ch 0028 4] Asl Compiler ID : "BXPC" | 27 | [01Ch 0028 4] Asl Compiler ID : "BXPC" |
28 | [020h 0032 4] Asl Compiler Revision : 00000001 | 28 | [020h 0032 4] Asl Compiler Revision : 00000001 |
29 | 29 | ||
30 | [024h 0036 1] Subtable Type : 00 [Processor Hierarchy Node] | 30 | [024h 0036 1] Subtable Type : 00 [Processor Hierarchy Node] |
31 | [025h 0037 1] Length : 14 | 31 | [025h 0037 1] Length : 14 |
32 | [026h 0038 2] Reserved : 0000 | 32 | [026h 0038 2] Reserved : 0000 |
33 | [028h 0040 4] Flags (decoded below) : 00000011 | 33 | [028h 0040 4] Flags (decoded below) : 00000011 |
34 | Physical package : 1 | 34 | Physical package : 1 |
35 | ACPI Processor ID valid : 0 | 35 | ACPI Processor ID valid : 0 |
36 | Processor is a thread : 0 | 36 | Processor is a thread : 0 |
37 | Node is a leaf : 0 | 37 | Node is a leaf : 0 |
38 | Identical Implementation : 1 | 38 | Identical Implementation : 1 |
39 | [02Ch 0044 4] Parent : 00000000 | 39 | [02Ch 0044 4] Parent : 00000000 |
40 | [030h 0048 4] ACPI Processor ID : 00000000 | 40 | [030h 0048 4] ACPI Processor ID : 00000000 |
41 | [034h 0052 4] Private Resource Number : 00000000 | 41 | [034h 0052 4] Private Resource Number : 00000000 |
42 | 42 | ||
43 | [038h 0056 1] Subtable Type : 00 [Processor Hierarchy Node] | 43 | [038h 0056 1] Subtable Type : 00 [Processor Hierarchy Node] |
44 | [039h 0057 1] Length : 14 | 44 | [039h 0057 1] Length : 14 |
45 | [03Ah 0058 2] Reserved : 0000 | 45 | [03Ah 0058 2] Reserved : 0000 |
46 | [03Ch 0060 4] Flags (decoded below) : 00000011 | 46 | [03Ch 0060 4] Flags (decoded below) : 00000011 |
47 | Physical package : 1 | 47 | Physical package : 1 |
48 | ACPI Processor ID valid : 0 | 48 | ACPI Processor ID valid : 0 |
49 | Processor is a thread : 0 | 49 | Processor is a thread : 0 |
50 | Node is a leaf : 0 | 50 | Node is a leaf : 0 |
51 | Identical Implementation : 1 | 51 | Identical Implementation : 1 |
52 | [040h 0064 4] Parent : 00000024 | 52 | [040h 0064 4] Parent : 00000024 |
53 | [044h 0068 4] ACPI Processor ID : 00000000 | 53 | [044h 0068 4] ACPI Processor ID : 00000000 |
54 | [048h 0072 4] Private Resource Number : 00000000 | 54 | [048h 0072 4] Private Resource Number : 00000000 |
55 | 55 | ||
56 | [04Ch 0076 1] Subtable Type : 01 [Cache Type] | 56 | [04Ch 0076 1] Subtable Type : 01 [Cache Type] |
57 | [04Dh 0077 1] Length : 1C | 57 | [04Dh 0077 1] Length : 1C |
58 | [04Eh 0078 2] Reserved : 0000 | 58 | [04Eh 0078 2] Reserved : 0000 |
59 | [050h 0080 4] Flags (decoded below) : 000000FF | 59 | [050h 0080 4] Flags (decoded below) : 000000FF |
60 | Size valid : 1 | 60 | Size valid : 1 |
61 | Number of Sets valid : 1 | 61 | Number of Sets valid : 1 |
62 | Associativity valid : 1 | 62 | Associativity valid : 1 |
63 | Allocation Type valid : 1 | 63 | Allocation Type valid : 1 |
64 | Cache Type valid : 1 | 64 | Cache Type valid : 1 |
65 | Write Policy valid : 1 | 65 | Write Policy valid : 1 |
66 | Line Size valid : 1 | 66 | Line Size valid : 1 |
67 | [054h 0084 4] Next Level of Cache : 00000000 | 67 | [054h 0084 4] Next Level of Cache : 00000000 |
68 | [058h 0088 4] Size : 00200000 | 68 | [058h 0088 4] Size : 00200000 |
69 | [05Ch 0092 4] Number of Sets : 00000800 | 69 | [05Ch 0092 4] Number of Sets : 00000800 |
70 | [060h 0096 1] Associativity : 10 | 70 | [060h 0096 1] Associativity : 10 |
71 | [061h 0097 1] Attributes : 0F | 71 | [061h 0097 1] Attributes : 0F |
72 | Allocation Type : 3 | 72 | Allocation Type : 3 |
73 | Cache Type : 3 | 73 | Cache Type : 3 |
74 | Write Policy : 0 | 74 | Write Policy : 0 |
75 | [062h 0098 2] Line Size : 0040 | 75 | [062h 0098 2] Line Size : 0040 |
76 | 76 | ||
77 | [068h 0104 1] Subtable Type : 01 [Cache Type] | 77 | [068h 0104 1] Subtable Type : 01 [Cache Type] |
78 | [069h 0105 1] Length : 1C | 78 | [069h 0105 1] Length : 1C |
79 | [06Ah 0106 2] Reserved : 0000 | 79 | [06Ah 0106 2] Reserved : 0000 |
80 | [06Ch 0108 4] Flags (decoded below) : 000000FF | 80 | [06Ch 0108 4] Flags (decoded below) : 000000FF |
81 | Size valid : 1 | 81 | Size valid : 1 |
82 | Number of Sets valid : 1 | 82 | Number of Sets valid : 1 |
83 | Associativity valid : 1 | 83 | Associativity valid : 1 |
84 | Allocation Type valid : 1 | 84 | Allocation Type valid : 1 |
85 | Cache Type valid : 1 | 85 | Cache Type valid : 1 |
86 | Write Policy valid : 1 | 86 | Write Policy valid : 1 |
87 | Line Size valid : 1 | 87 | Line Size valid : 1 |
88 | [070h 0112 4] Next Level of Cache : 0000004C | 88 | [070h 0112 4] Next Level of Cache : 0000004C |
89 | [074h 0116 4] Size : 00008000 | 89 | [074h 0116 4] Size : 00008000 |
90 | [078h 0120 4] Number of Sets : 00000080 | 90 | [078h 0120 4] Number of Sets : 00000080 |
91 | [07Ch 0124 1] Associativity : 04 | 91 | [07Ch 0124 1] Associativity : 04 |
92 | [07Dh 0125 1] Attributes : 03 | 92 | [07Dh 0125 1] Attributes : 03 |
93 | Allocation Type : 3 | 93 | Allocation Type : 3 |
94 | Cache Type : 0 | 94 | Cache Type : 0 |
95 | Write Policy : 0 | 95 | Write Policy : 0 |
96 | [07Eh 0126 2] Line Size : 0040 | 96 | [07Eh 0126 2] Line Size : 0040 |
97 | 97 | ||
98 | [084h 0132 1] Subtable Type : 01 [Cache Type] | 98 | [084h 0132 1] Subtable Type : 01 [Cache Type] |
99 | [085h 0133 1] Length : 1C | 99 | [085h 0133 1] Length : 1C |
100 | [086h 0134 2] Reserved : 0000 | 100 | [086h 0134 2] Reserved : 0000 |
101 | [088h 0136 4] Flags (decoded below) : 000000FF | 101 | [088h 0136 4] Flags (decoded below) : 000000FF |
102 | Size valid : 1 | 102 | Size valid : 1 |
103 | Number of Sets valid : 1 | 103 | Number of Sets valid : 1 |
104 | Associativity valid : 1 | 104 | Associativity valid : 1 |
105 | Allocation Type valid : 1 | 105 | Allocation Type valid : 1 |
106 | Cache Type valid : 1 | 106 | Cache Type valid : 1 |
107 | Write Policy valid : 1 | 107 | Write Policy valid : 1 |
108 | Line Size valid : 1 | 108 | Line Size valid : 1 |
109 | [08Ch 0140 4] Next Level of Cache : 0000004C | 109 | [08Ch 0140 4] Next Level of Cache : 0000004C |
110 | [090h 0144 4] Size : 0000C000 | 110 | [090h 0144 4] Size : 0000C000 |
111 | [094h 0148 4] Number of Sets : 00000100 | 111 | [094h 0148 4] Number of Sets : 00000100 |
112 | [098h 0152 1] Associativity : 03 | 112 | [098h 0152 1] Associativity : 03 |
113 | [099h 0153 1] Attributes : 07 | 113 | [099h 0153 1] Attributes : 07 |
114 | Allocation Type : 3 | 114 | Allocation Type : 3 |
115 | Cache Type : 1 | 115 | Cache Type : 1 |
116 | Write Policy : 0 | 116 | Write Policy : 0 |
117 | [09Ah 0154 2] Line Size : 0040 | 117 | [09Ah 0154 2] Line Size : 0040 |
118 | 118 | ||
119 | [0A0h 0160 1] Subtable Type : 00 [Processor Hierarchy Node] | 119 | [0A0h 0160 1] Subtable Type : 00 [Processor Hierarchy Node] |
120 | [0A1h 0161 1] Length : 1C | 120 | [0A1h 0161 1] Length : 1C |
121 | [0A2h 0162 2] Reserved : 0000 | 121 | [0A2h 0162 2] Reserved : 0000 |
122 | [0A4h 0164 4] Flags (decoded below) : 00000010 | 122 | [0A4h 0164 4] Flags (decoded below) : 00000010 |
123 | Physical package : 0 | 123 | Physical package : 0 |
124 | ACPI Processor ID valid : 0 | 124 | ACPI Processor ID valid : 0 |
125 | Processor is a thread : 0 | 125 | Processor is a thread : 0 |
126 | Node is a leaf : 0 | 126 | Node is a leaf : 0 |
127 | Identical Implementation : 1 | 127 | Identical Implementation : 1 |
128 | [0A8h 0168 4] Parent : 00000038 | 128 | [0A8h 0168 4] Parent : 00000038 |
129 | [0ACh 0172 4] ACPI Processor ID : 00000000 | 129 | [0ACh 0172 4] ACPI Processor ID : 00000000 |
130 | [0B0h 0176 4] Private Resource Number : 00000002 | 130 | [0B0h 0176 4] Private Resource Number : 00000002 |
131 | [0B4h 0180 4] Private Resource : 00000084 | 131 | [0B4h 0180 4] Private Resource : 00000084 |
132 | [0B8h 0184 4] Private Resource : 00000068 | 132 | [0B8h 0184 4] Private Resource : 00000068 |
133 | 133 | ||
134 | [0BCh 0188 1] Subtable Type : 00 [Processor Hierarchy Node] | 134 | [0BCh 0188 1] Subtable Type : 00 [Processor Hierarchy Node] |
135 | [0BDh 0189 1] Length : 14 | 135 | [0BDh 0189 1] Length : 14 |
136 | [0BEh 0190 2] Reserved : 0000 | 136 | [0BEh 0190 2] Reserved : 0000 |
137 | [0C0h 0192 4] Flags (decoded below) : 00000010 | 137 | [0C0h 0192 4] Flags (decoded below) : 00000010 |
138 | Physical package : 0 | 138 | Physical package : 0 |
139 | ACPI Processor ID valid : 0 | 139 | ACPI Processor ID valid : 0 |
140 | Processor is a thread : 0 | 140 | Processor is a thread : 0 |
141 | Node is a leaf : 0 | 141 | Node is a leaf : 0 |
142 | Identical Implementation : 1 | 142 | Identical Implementation : 1 |
143 | [0C4h 0196 4] Parent : 000000A0 | 143 | [0C4h 0196 4] Parent : 000000A0 |
144 | [0C8h 0200 4] ACPI Processor ID : 00000000 | 144 | [0C8h 0200 4] ACPI Processor ID : 00000000 |
145 | [0CCh 0204 4] Private Resource Number : 00000000 | 145 | [0CCh 0204 4] Private Resource Number : 00000000 |
146 | 146 | ||
147 | [0D0h 0208 1] Subtable Type : 00 [Processor Hierarchy Node] | 147 | [0D0h 0208 1] Subtable Type : 00 [Processor Hierarchy Node] |
148 | [0D1h 0209 1] Length : 14 | 148 | [0D1h 0209 1] Length : 14 |
149 | [0D2h 0210 2] Reserved : 0000 | 149 | [0D2h 0210 2] Reserved : 0000 |
150 | [0D4h 0212 4] Flags (decoded below) : 0000000E | 150 | [0D4h 0212 4] Flags (decoded below) : 0000000E |
151 | Physical package : 0 | 151 | Physical package : 0 |
152 | ACPI Processor ID valid : 1 | 152 | ACPI Processor ID valid : 1 |
153 | Processor is a thread : 1 | 153 | Processor is a thread : 1 |
154 | Node is a leaf : 1 | 154 | Node is a leaf : 1 |
155 | Identical Implementation : 0 | 155 | Identical Implementation : 0 |
156 | [0D8h 0216 4] Parent : 000000BC | 156 | [0D8h 0216 4] Parent : 000000BC |
157 | [0DCh 0220 4] ACPI Processor ID : 00000000 | 157 | [0DCh 0220 4] ACPI Processor ID : 00000000 |
158 | [0E0h 0224 4] Private Resource Number : 00000000 | 158 | [0E0h 0224 4] Private Resource Number : 00000000 |
159 | 159 | ||
160 | [0E4h 0228 1] Subtable Type : 00 [Processor Hierarchy Node] | 160 | [0E4h 0228 1] Subtable Type : 00 [Processor Hierarchy Node] |
161 | [0E5h 0229 1] Length : 14 | 161 | [0E5h 0229 1] Length : 14 |
162 | [0E6h 0230 2] Reserved : 0000 | 162 | [0E6h 0230 2] Reserved : 0000 |
163 | [0E8h 0232 4] Flags (decoded below) : 0000000E | 163 | [0E8h 0232 4] Flags (decoded below) : 0000000E |
164 | Physical package : 0 | 164 | Physical package : 0 |
165 | ACPI Processor ID valid : 1 | 165 | ACPI Processor ID valid : 1 |
166 | Processor is a thread : 1 | 166 | Processor is a thread : 1 |
167 | Node is a leaf : 1 | 167 | Node is a leaf : 1 |
168 | Identical Implementation : 0 | 168 | Identical Implementation : 0 |
169 | [0ECh 0236 4] Parent : 000000BC | 169 | [0ECh 0236 4] Parent : 000000BC |
170 | [0F0h 0240 4] ACPI Processor ID : 00000001 | 170 | [0F0h 0240 4] ACPI Processor ID : 00000001 |
171 | [0F4h 0244 4] Private Resource Number : 00000000 | 171 | [0F4h 0244 4] Private Resource Number : 00000000 |
172 | 172 | ||
173 | [0F8h 0248 1] Subtable Type : 00 [Processor Hierarchy Node] | 173 | [0F8h 0248 1] Subtable Type : 00 [Processor Hierarchy Node] |
174 | [0F9h 0249 1] Length : 14 | 174 | [0F9h 0249 1] Length : 14 |
175 | [0FAh 0250 2] Reserved : 0000 | 175 | [0FAh 0250 2] Reserved : 0000 |
176 | [0FCh 0252 4] Flags (decoded below) : 00000010 | 176 | [0FCh 0252 4] Flags (decoded below) : 00000010 |
177 | Physical package : 0 | 177 | Physical package : 0 |
178 | ACPI Processor ID valid : 0 | 178 | ACPI Processor ID valid : 0 |
179 | Processor is a thread : 0 | 179 | Processor is a thread : 0 |
180 | Node is a leaf : 0 | 180 | Node is a leaf : 0 |
181 | Identical Implementation : 1 | 181 | Identical Implementation : 1 |
182 | [100h 0256 4] Parent : 000000A0 | 182 | [100h 0256 4] Parent : 000000A0 |
183 | [104h 0260 4] ACPI Processor ID : 00000001 | 183 | [104h 0260 4] ACPI Processor ID : 00000001 |
184 | [108h 0264 4] Private Resource Number : 00000000 | 184 | [108h 0264 4] Private Resource Number : 00000000 |
185 | 185 | ||
186 | [10Ch 0268 1] Subtable Type : 00 [Processor Hierarchy Node] | 186 | [10Ch 0268 1] Subtable Type : 00 [Processor Hierarchy Node] |
187 | [10Dh 0269 1] Length : 14 | 187 | [10Dh 0269 1] Length : 14 |
188 | [10Eh 0270 2] Reserved : 0000 | 188 | [10Eh 0270 2] Reserved : 0000 |
189 | [110h 0272 4] Flags (decoded below) : 0000000E | 189 | [110h 0272 4] Flags (decoded below) : 0000000E |
190 | Physical package : 0 | 190 | Physical package : 0 |
191 | ACPI Processor ID valid : 1 | 191 | ACPI Processor ID valid : 1 |
192 | Processor is a thread : 1 | 192 | Processor is a thread : 1 |
193 | Node is a leaf : 1 | 193 | Node is a leaf : 1 |
194 | Identical Implementation : 0 | 194 | Identical Implementation : 0 |
195 | [114h 0276 4] Parent : 000000F8 | 195 | [114h 0276 4] Parent : 000000F8 |
196 | [118h 0280 4] ACPI Processor ID : 00000002 | 196 | [118h 0280 4] ACPI Processor ID : 00000002 |
197 | [11Ch 0284 4] Private Resource Number : 00000000 | 197 | [11Ch 0284 4] Private Resource Number : 00000000 |
198 | 198 | ||
199 | [120h 0288 1] Subtable Type : 00 [Processor Hierarchy Node] | 199 | [120h 0288 1] Subtable Type : 00 [Processor Hierarchy Node] |
200 | [121h 0289 1] Length : 14 | 200 | [121h 0289 1] Length : 14 |
201 | [122h 0290 2] Reserved : 0000 | 201 | [122h 0290 2] Reserved : 0000 |
202 | [124h 0292 4] Flags (decoded below) : 0000000E | 202 | [124h 0292 4] Flags (decoded below) : 0000000E |
203 | Physical package : 0 | 203 | Physical package : 0 |
204 | ACPI Processor ID valid : 1 | 204 | ACPI Processor ID valid : 1 |
205 | Processor is a thread : 1 | 205 | Processor is a thread : 1 |
206 | Node is a leaf : 1 | 206 | Node is a leaf : 1 |
207 | Identical Implementation : 0 | 207 | Identical Implementation : 0 |
208 | [128h 0296 4] Parent : 000000F8 | 208 | [128h 0296 4] Parent : 000000F8 |
209 | [12Ch 0300 4] ACPI Processor ID : 00000003 | 209 | [12Ch 0300 4] ACPI Processor ID : 00000003 |
210 | [130h 0304 4] Private Resource Number : 00000000 | 210 | [130h 0304 4] Private Resource Number : 00000000 |
211 | 211 | ||
212 | [134h 0308 1] Subtable Type : 01 [Cache Type] | 212 | [134h 0308 1] Subtable Type : 01 [Cache Type] |
213 | [135h 0309 1] Length : 1C | 213 | [135h 0309 1] Length : 1C |
214 | [136h 0310 2] Reserved : 0000 | 214 | [136h 0310 2] Reserved : 0000 |
215 | [138h 0312 4] Flags (decoded below) : 000000FF | 215 | [138h 0312 4] Flags (decoded below) : 000000FF |
216 | Size valid : 1 | 216 | Size valid : 1 |
217 | Number of Sets valid : 1 | 217 | Number of Sets valid : 1 |
218 | Associativity valid : 1 | 218 | Associativity valid : 1 |
219 | Allocation Type valid : 1 | 219 | Allocation Type valid : 1 |
220 | Cache Type valid : 1 | 220 | Cache Type valid : 1 |
221 | Write Policy valid : 1 | 221 | Write Policy valid : 1 |
222 | Line Size valid : 1 | 222 | Line Size valid : 1 |
223 | [13Ch 0316 4] Next Level of Cache : 00000000 | 223 | [13Ch 0316 4] Next Level of Cache : 00000000 |
224 | [140h 0320 4] Size : 00200000 | 224 | [140h 0320 4] Size : 00200000 |
225 | [144h 0324 4] Number of Sets : 00000800 | 225 | [144h 0324 4] Number of Sets : 00000800 |
226 | [148h 0328 1] Associativity : 10 | 226 | [148h 0328 1] Associativity : 10 |
227 | [149h 0329 1] Attributes : 0F | 227 | [149h 0329 1] Attributes : 0F |
228 | Allocation Type : 3 | 228 | Allocation Type : 3 |
229 | Cache Type : 3 | 229 | Cache Type : 3 |
230 | Write Policy : 0 | 230 | Write Policy : 0 |
231 | [14Ah 0330 2] Line Size : 0040 | 231 | [14Ah 0330 2] Line Size : 0040 |
232 | 232 | ||
233 | [150h 0336 1] Subtable Type : 01 [Cache Type] | 233 | [150h 0336 1] Subtable Type : 01 [Cache Type] |
234 | [151h 0337 1] Length : 1C | 234 | [151h 0337 1] Length : 1C |
235 | [152h 0338 2] Reserved : 0000 | 235 | [152h 0338 2] Reserved : 0000 |
236 | [154h 0340 4] Flags (decoded below) : 000000FF | 236 | [154h 0340 4] Flags (decoded below) : 000000FF |
237 | Size valid : 1 | 237 | Size valid : 1 |
238 | Number of Sets valid : 1 | 238 | Number of Sets valid : 1 |
239 | Associativity valid : 1 | 239 | Associativity valid : 1 |
240 | Allocation Type valid : 1 | 240 | Allocation Type valid : 1 |
241 | Cache Type valid : 1 | 241 | Cache Type valid : 1 |
242 | Write Policy valid : 1 | 242 | Write Policy valid : 1 |
243 | Line Size valid : 1 | 243 | Line Size valid : 1 |
244 | [158h 0344 4] Next Level of Cache : 00000134 | 244 | [158h 0344 4] Next Level of Cache : 00000134 |
245 | [15Ch 0348 4] Size : 00008000 | 245 | [15Ch 0348 4] Size : 00008000 |
246 | [160h 0352 4] Number of Sets : 00000080 | 246 | [160h 0352 4] Number of Sets : 00000080 |
247 | [164h 0356 1] Associativity : 04 | 247 | [164h 0356 1] Associativity : 04 |
248 | [165h 0357 1] Attributes : 03 | 248 | [165h 0357 1] Attributes : 03 |
249 | Allocation Type : 3 | 249 | Allocation Type : 3 |
250 | Cache Type : 0 | 250 | Cache Type : 0 |
251 | Write Policy : 0 | 251 | Write Policy : 0 |
252 | [166h 0358 2] Line Size : 0040 | 252 | [166h 0358 2] Line Size : 0040 |
253 | 253 | ||
254 | [16Ch 0364 1] Subtable Type : 01 [Cache Type] | 254 | [16Ch 0364 1] Subtable Type : 01 [Cache Type] |
255 | [16Dh 0365 1] Length : 1C | 255 | [16Dh 0365 1] Length : 1C |
256 | [16Eh 0366 2] Reserved : 0000 | 256 | [16Eh 0366 2] Reserved : 0000 |
257 | [170h 0368 4] Flags (decoded below) : 000000FF | 257 | [170h 0368 4] Flags (decoded below) : 000000FF |
258 | Size valid : 1 | 258 | Size valid : 1 |
259 | Number of Sets valid : 1 | 259 | Number of Sets valid : 1 |
260 | Associativity valid : 1 | 260 | Associativity valid : 1 |
261 | Allocation Type valid : 1 | 261 | Allocation Type valid : 1 |
262 | Cache Type valid : 1 | 262 | Cache Type valid : 1 |
263 | Write Policy valid : 1 | 263 | Write Policy valid : 1 |
264 | Line Size valid : 1 | 264 | Line Size valid : 1 |
265 | [174h 0372 4] Next Level of Cache : 00000134 | 265 | [174h 0372 4] Next Level of Cache : 00000134 |
266 | [178h 0376 4] Size : 0000C000 | 266 | [178h 0376 4] Size : 0000C000 |
267 | [17Ch 0380 4] Number of Sets : 00000100 | 267 | [17Ch 0380 4] Number of Sets : 00000100 |
268 | [180h 0384 1] Associativity : 03 | 268 | [180h 0384 1] Associativity : 03 |
269 | [181h 0385 1] Attributes : 07 | 269 | [181h 0385 1] Attributes : 07 |
270 | Allocation Type : 3 | 270 | Allocation Type : 3 |
271 | Cache Type : 1 | 271 | Cache Type : 1 |
272 | Write Policy : 0 | 272 | Write Policy : 0 |
273 | [182h 0386 2] Line Size : 0040 | 273 | [182h 0386 2] Line Size : 0040 |
274 | 274 | ||
275 | [188h 0392 1] Subtable Type : 00 [Processor Hierarchy Node] | 275 | [188h 0392 1] Subtable Type : 00 [Processor Hierarchy Node] |
276 | [189h 0393 1] Length : 1C | 276 | [189h 0393 1] Length : 1C |
277 | [18Ah 0394 2] Reserved : 0000 | 277 | [18Ah 0394 2] Reserved : 0000 |
278 | [18Ch 0396 4] Flags (decoded below) : 00000010 | 278 | [18Ch 0396 4] Flags (decoded below) : 00000010 |
279 | Physical package : 0 | 279 | Physical package : 0 |
280 | ACPI Processor ID valid : 0 | 280 | ACPI Processor ID valid : 0 |
281 | Processor is a thread : 0 | 281 | Processor is a thread : 0 |
282 | Node is a leaf : 0 | 282 | Node is a leaf : 0 |
283 | Identical Implementation : 1 | 283 | Identical Implementation : 1 |
284 | [190h 0400 4] Parent : 00000038 | 284 | [190h 0400 4] Parent : 00000038 |
285 | [194h 0404 4] ACPI Processor ID : 00000001 | 285 | [194h 0404 4] ACPI Processor ID : 00000001 |
286 | [198h 0408 4] Private Resource Number : 00000002 | 286 | [198h 0408 4] Private Resource Number : 00000002 |
287 | [19Ch 0412 4] Private Resource : 0000016C | 287 | [19Ch 0412 4] Private Resource : 0000016C |
288 | [1A0h 0416 4] Private Resource : 00000150 | 288 | [1A0h 0416 4] Private Resource : 00000150 |
289 | 289 | ||
290 | [1A4h 0420 1] Subtable Type : 00 [Processor Hierarchy Node] | 290 | [1A4h 0420 1] Subtable Type : 00 [Processor Hierarchy Node] |
291 | [1A5h 0421 1] Length : 14 | 291 | [1A5h 0421 1] Length : 14 |
292 | [1A6h 0422 2] Reserved : 0000 | 292 | [1A6h 0422 2] Reserved : 0000 |
293 | [1A8h 0424 4] Flags (decoded below) : 00000010 | 293 | [1A8h 0424 4] Flags (decoded below) : 00000010 |
294 | Physical package : 0 | 294 | Physical package : 0 |
295 | ACPI Processor ID valid : 0 | 295 | ACPI Processor ID valid : 0 |
296 | Processor is a thread : 0 | 296 | Processor is a thread : 0 |
297 | Node is a leaf : 0 | 297 | Node is a leaf : 0 |
298 | Identical Implementation : 1 | 298 | Identical Implementation : 1 |
299 | [1ACh 0428 4] Parent : 00000188 | 299 | [1ACh 0428 4] Parent : 00000188 |
300 | [1B0h 0432 4] ACPI Processor ID : 00000000 | 300 | [1B0h 0432 4] ACPI Processor ID : 00000000 |
301 | [1B4h 0436 4] Private Resource Number : 00000000 | 301 | [1B4h 0436 4] Private Resource Number : 00000000 |
302 | 302 | ||
303 | [1B8h 0440 1] Subtable Type : 00 [Processor Hierarchy Node] | 303 | [1B8h 0440 1] Subtable Type : 00 [Processor Hierarchy Node] |
304 | [1B9h 0441 1] Length : 14 | 304 | [1B9h 0441 1] Length : 14 |
305 | [1BAh 0442 2] Reserved : 0000 | 305 | [1BAh 0442 2] Reserved : 0000 |
306 | [1BCh 0444 4] Flags (decoded below) : 0000000E | 306 | [1BCh 0444 4] Flags (decoded below) : 0000000E |
307 | Physical package : 0 | 307 | Physical package : 0 |
308 | ACPI Processor ID valid : 1 | 308 | ACPI Processor ID valid : 1 |
309 | Processor is a thread : 1 | 309 | Processor is a thread : 1 |
310 | Node is a leaf : 1 | 310 | Node is a leaf : 1 |
311 | Identical Implementation : 0 | 311 | Identical Implementation : 0 |
312 | [1C0h 0448 4] Parent : 000001A4 | 312 | [1C0h 0448 4] Parent : 000001A4 |
313 | [1C4h 0452 4] ACPI Processor ID : 00000004 | 313 | [1C4h 0452 4] ACPI Processor ID : 00000004 |
314 | [1C8h 0456 4] Private Resource Number : 00000000 | 314 | [1C8h 0456 4] Private Resource Number : 00000000 |
315 | 315 | ||
316 | [1CCh 0460 1] Subtable Type : 00 [Processor Hierarchy Node] | 316 | [1CCh 0460 1] Subtable Type : 00 [Processor Hierarchy Node] |
317 | [1CDh 0461 1] Length : 14 | 317 | [1CDh 0461 1] Length : 14 |
318 | [1CEh 0462 2] Reserved : 0000 | 318 | [1CEh 0462 2] Reserved : 0000 |
319 | [1D0h 0464 4] Flags (decoded below) : 0000000E | 319 | [1D0h 0464 4] Flags (decoded below) : 0000000E |
320 | Physical package : 0 | 320 | Physical package : 0 |
321 | ACPI Processor ID valid : 1 | 321 | ACPI Processor ID valid : 1 |
322 | Processor is a thread : 1 | 322 | Processor is a thread : 1 |
323 | Node is a leaf : 1 | 323 | Node is a leaf : 1 |
324 | Identical Implementation : 0 | 324 | Identical Implementation : 0 |
325 | [1D4h 0468 4] Parent : 000001A4 | 325 | [1D4h 0468 4] Parent : 000001A4 |
326 | [1D8h 0472 4] ACPI Processor ID : 00000005 | 326 | [1D8h 0472 4] ACPI Processor ID : 00000005 |
327 | [1DCh 0476 4] Private Resource Number : 00000000 | 327 | [1DCh 0476 4] Private Resource Number : 00000000 |
328 | 328 | ||
329 | [1E0h 0480 1] Subtable Type : 00 [Processor Hierarchy Node] | 329 | [1E0h 0480 1] Subtable Type : 00 [Processor Hierarchy Node] |
330 | [1E1h 0481 1] Length : 14 | 330 | [1E1h 0481 1] Length : 14 |
331 | [1E2h 0482 2] Reserved : 0000 | 331 | [1E2h 0482 2] Reserved : 0000 |
332 | [1E4h 0484 4] Flags (decoded below) : 00000010 | 332 | [1E4h 0484 4] Flags (decoded below) : 00000010 |
333 | Physical package : 0 | 333 | Physical package : 0 |
334 | ACPI Processor ID valid : 0 | 334 | ACPI Processor ID valid : 0 |
335 | Processor is a thread : 0 | 335 | Processor is a thread : 0 |
336 | Node is a leaf : 0 | 336 | Node is a leaf : 0 |
337 | Identical Implementation : 1 | 337 | Identical Implementation : 1 |
338 | [1E8h 0488 4] Parent : 00000188 | 338 | [1E8h 0488 4] Parent : 00000188 |
339 | [1ECh 0492 4] ACPI Processor ID : 00000001 | 339 | [1ECh 0492 4] ACPI Processor ID : 00000001 |
340 | [1F0h 0496 4] Private Resource Number : 00000000 | 340 | [1F0h 0496 4] Private Resource Number : 00000000 |
341 | 341 | ||
342 | [1F4h 0500 1] Subtable Type : 00 [Processor Hierarchy Node] | 342 | [1F4h 0500 1] Subtable Type : 00 [Processor Hierarchy Node] |
343 | [1F5h 0501 1] Length : 14 | 343 | [1F5h 0501 1] Length : 14 |
344 | [1F6h 0502 2] Reserved : 0000 | 344 | [1F6h 0502 2] Reserved : 0000 |
345 | [1F8h 0504 4] Flags (decoded below) : 0000000E | 345 | [1F8h 0504 4] Flags (decoded below) : 0000000E |
346 | Physical package : 0 | 346 | Physical package : 0 |
347 | ACPI Processor ID valid : 1 | 347 | ACPI Processor ID valid : 1 |
348 | Processor is a thread : 1 | 348 | Processor is a thread : 1 |
349 | Node is a leaf : 1 | 349 | Node is a leaf : 1 |
350 | Identical Implementation : 0 | 350 | Identical Implementation : 0 |
351 | [1FCh 0508 4] Parent : 000001E0 | 351 | [1FCh 0508 4] Parent : 000001E0 |
352 | [200h 0512 4] ACPI Processor ID : 00000006 | 352 | [200h 0512 4] ACPI Processor ID : 00000006 |
353 | [204h 0516 4] Private Resource Number : 00000000 | 353 | [204h 0516 4] Private Resource Number : 00000000 |
354 | 354 | ||
355 | [208h 0520 1] Subtable Type : 00 [Processor Hierarchy Node] | 355 | [208h 0520 1] Subtable Type : 00 [Processor Hierarchy Node] |
356 | [209h 0521 1] Length : 14 | 356 | [209h 0521 1] Length : 14 |
357 | [20Ah 0522 2] Reserved : 0000 | 357 | [20Ah 0522 2] Reserved : 0000 |
358 | [20Ch 0524 4] Flags (decoded below) : 0000000E | 358 | [20Ch 0524 4] Flags (decoded below) : 0000000E |
359 | Physical package : 0 | 359 | Physical package : 0 |
360 | ACPI Processor ID valid : 1 | 360 | ACPI Processor ID valid : 1 |
361 | Processor is a thread : 1 | 361 | Processor is a thread : 1 |
362 | Node is a leaf : 1 | 362 | Node is a leaf : 1 |
363 | Identical Implementation : 0 | 363 | Identical Implementation : 0 |
364 | [210h 0528 4] Parent : 000001E0 | 364 | [210h 0528 4] Parent : 000001E0 |
365 | [214h 0532 4] ACPI Processor ID : 00000007 | 365 | [214h 0532 4] ACPI Processor ID : 00000007 |
366 | [218h 0536 4] Private Resource Number : 00000000 | 366 | [218h 0536 4] Private Resource Number : 00000000 |
367 | 367 | ||
368 | Raw Table Data: Length 540 (0x21C) | 368 | Raw Table Data: Length 540 (0x21C) |
369 | 369 | ||
370 | 0000: 50 50 54 54 1C 02 00 00 03 4D 42 4F 43 48 53 20 // PPTT.....MBOCHS | 370 | 0000: 50 50 54 54 1C 02 00 00 03 4D 42 4F 43 48 53 20 // PPTT.....MBOCHS |
371 | 0010: 42 58 50 43 20 20 20 20 01 00 00 00 42 58 50 43 // BXPC ....BXPC | 371 | 0010: 42 58 50 43 20 20 20 20 01 00 00 00 42 58 50 43 // BXPC ....BXPC |
372 | 0020: 01 00 00 00 00 14 00 00 11 00 00 00 00 00 00 00 // ................ | 372 | 0020: 01 00 00 00 00 14 00 00 11 00 00 00 00 00 00 00 // ................ |
373 | 0030: 00 00 00 00 00 00 00 00 00 14 00 00 11 00 00 00 // ................ | 373 | 0030: 00 00 00 00 00 00 00 00 00 14 00 00 11 00 00 00 // ................ |
374 | 0040: 24 00 00 00 00 00 00 00 00 00 00 00 01 1C 00 00 // $............... | 374 | 0040: 24 00 00 00 00 00 00 00 00 00 00 00 01 1C 00 00 // $............... |
375 | 0050: FF 00 00 00 00 00 00 00 00 00 20 00 00 08 00 00 // .......... ..... | 375 | 0050: FF 00 00 00 00 00 00 00 00 00 20 00 00 08 00 00 // .......... ..... |
376 | 0060: 10 0F 40 00 00 00 02 02 01 1C 00 00 FF 00 00 00 // ..@............. | 376 | 0060: 10 0F 40 00 00 00 02 02 01 1C 00 00 FF 00 00 00 // ..@............. |
377 | 0070: 4C 00 00 00 00 80 00 00 80 00 00 00 04 03 40 00 // L.............@. | 377 | 0070: 4C 00 00 00 00 80 00 00 80 00 00 00 04 03 40 00 // L.............@. |
378 | 0080: 00 00 01 00 01 1C 00 00 FF 00 00 00 4C 00 00 00 // ............L... | 378 | 0080: 00 00 01 00 01 1C 00 00 FF 00 00 00 4C 00 00 00 // ............L... |
379 | 0090: 00 C0 00 00 00 01 00 00 03 07 40 00 00 00 01 01 // ..........@..... | 379 | 0090: 00 C0 00 00 00 01 00 00 03 07 40 00 00 00 01 01 // ..........@..... |
380 | 00A0: 00 1C 00 00 10 00 00 00 38 00 00 00 00 00 00 00 // ........8....... | 380 | 00A0: 00 1C 00 00 10 00 00 00 38 00 00 00 00 00 00 00 // ........8....... |
381 | 00B0: 02 00 00 00 84 00 00 00 68 00 00 00 00 14 00 00 // ........h....... | 381 | 00B0: 02 00 00 00 84 00 00 00 68 00 00 00 00 14 00 00 // ........h....... |
382 | 00C0: 10 00 00 00 A0 00 00 00 00 00 00 00 00 00 00 00 // ................ | 382 | 00C0: 10 00 00 00 A0 00 00 00 00 00 00 00 00 00 00 00 // ................ |
383 | 00D0: 00 14 00 00 0E 00 00 00 BC 00 00 00 00 00 00 00 // ................ | 383 | 00D0: 00 14 00 00 0E 00 00 00 BC 00 00 00 00 00 00 00 // ................ |
384 | 00E0: 00 00 00 00 00 14 00 00 0E 00 00 00 BC 00 00 00 // ................ | 384 | 00E0: 00 00 00 00 00 14 00 00 0E 00 00 00 BC 00 00 00 // ................ |
385 | 00F0: 01 00 00 00 00 00 00 00 00 14 00 00 10 00 00 00 // ................ | 385 | 00F0: 01 00 00 00 00 00 00 00 00 14 00 00 10 00 00 00 // ................ |
386 | 0100: A0 00 00 00 01 00 00 00 00 00 00 00 00 14 00 00 // ................ | 386 | 0100: A0 00 00 00 01 00 00 00 00 00 00 00 00 14 00 00 // ................ |
387 | 0110: 0E 00 00 00 F8 00 00 00 02 00 00 00 00 00 00 00 // ................ | 387 | 0110: 0E 00 00 00 F8 00 00 00 02 00 00 00 00 00 00 00 // ................ |
388 | 0120: 00 14 00 00 0E 00 00 00 F8 00 00 00 03 00 00 00 // ................ | 388 | 0120: 00 14 00 00 0E 00 00 00 F8 00 00 00 03 00 00 00 // ................ |
389 | 0130: 00 00 00 00 01 1C 00 00 FF 00 00 00 00 00 00 00 // ................ | 389 | 0130: 00 00 00 00 01 1C 00 00 FF 00 00 00 00 00 00 00 // ................ |
390 | 0140: 00 00 20 00 00 08 00 00 10 0F 40 00 04 00 02 02 // .. .......@..... | 390 | 0140: 00 00 20 00 00 08 00 00 10 0F 40 00 04 00 02 02 // .. .......@..... |
391 | 0150: 01 1C 00 00 FF 00 00 00 34 01 00 00 00 80 00 00 // ........4....... | 391 | 0150: 01 1C 00 00 FF 00 00 00 34 01 00 00 00 80 00 00 // ........4....... |
392 | 0160: 80 00 00 00 04 03 40 00 04 00 01 00 01 1C 00 00 // ......@......... | 392 | 0160: 80 00 00 00 04 03 40 00 04 00 01 00 01 1C 00 00 // ......@......... |
393 | 0170: FF 00 00 00 34 01 00 00 00 C0 00 00 00 01 00 00 // ....4........... | 393 | 0170: FF 00 00 00 34 01 00 00 00 C0 00 00 00 01 00 00 // ....4........... |
394 | 0180: 03 07 40 00 04 00 01 01 00 1C 00 00 10 00 00 00 // ..@............. | 394 | 0180: 03 07 40 00 04 00 01 01 00 1C 00 00 10 00 00 00 // ..@............. |
395 | 0190: 38 00 00 00 01 00 00 00 02 00 00 00 6C 01 00 00 // 8...........l... | 395 | 0190: 38 00 00 00 01 00 00 00 02 00 00 00 6C 01 00 00 // 8...........l... |
396 | 01A0: 50 01 00 00 00 14 00 00 10 00 00 00 88 01 00 00 // P............... | 396 | 01A0: 50 01 00 00 00 14 00 00 10 00 00 00 88 01 00 00 // P............... |
397 | 01B0: 00 00 00 00 00 00 00 00 00 14 00 00 0E 00 00 00 // ................ | 397 | 01B0: 00 00 00 00 00 00 00 00 00 14 00 00 0E 00 00 00 // ................ |
398 | 01C0: A4 01 00 00 04 00 00 00 00 00 00 00 00 14 00 00 // ................ | 398 | 01C0: A4 01 00 00 04 00 00 00 00 00 00 00 00 14 00 00 // ................ |
399 | 01D0: 0E 00 00 00 A4 01 00 00 05 00 00 00 00 00 00 00 // ................ | 399 | 01D0: 0E 00 00 00 A4 01 00 00 05 00 00 00 00 00 00 00 // ................ |
400 | 01E0: 00 14 00 00 10 00 00 00 88 01 00 00 01 00 00 00 // ................ | 400 | 01E0: 00 14 00 00 10 00 00 00 88 01 00 00 01 00 00 00 // ................ |
401 | 01F0: 00 00 00 00 00 14 00 00 0E 00 00 00 E0 01 00 00 // ................ | 401 | 01F0: 00 00 00 00 00 14 00 00 0E 00 00 00 E0 01 00 00 // ................ |
402 | 0200: 06 00 00 00 00 00 00 00 00 14 00 00 0E 00 00 00 // ................ | 402 | 0200: 06 00 00 00 00 00 00 00 00 14 00 00 0E 00 00 00 // ................ |
403 | 0210: E0 01 00 00 07 00 00 00 00 00 00 00 // ............ | 403 | 0210: E0 01 00 00 07 00 00 00 00 00 00 00 // ............ |
404 | 404 | ||
405 | Signed-off-by: Alireza Sanaee <alireza.sanaee@huawei.com> | 405 | Signed-off-by: Alireza Sanaee <alireza.sanaee@huawei.com> |
406 | Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> | 406 | Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> |
407 | --- | 407 | --- |
408 | tests/data/acpi/aarch64/virt/PPTT.topology | Bin 356 -> 540 bytes | 408 | tests/data/acpi/aarch64/virt/PPTT.topology | Bin 356 -> 540 bytes |
409 | tests/qtest/bios-tables-test-allowed-diff.h | 1 - | 409 | tests/qtest/bios-tables-test-allowed-diff.h | 1 - |
410 | 2 files changed, 1 deletion(-) | 410 | 2 files changed, 1 deletion(-) |
411 | 411 | ||
412 | diff --git a/tests/data/acpi/aarch64/virt/PPTT.topology b/tests/data/acpi/aarch64/virt/PPTT.topology | 412 | diff --git a/tests/data/acpi/aarch64/virt/PPTT.topology b/tests/data/acpi/aarch64/virt/PPTT.topology |
413 | index XXXXXXX..XXXXXXX 100644 | 413 | index XXXXXXX..XXXXXXX 100644 |
414 | GIT binary patch | 414 | GIT binary patch |
415 | literal 540 | 415 | literal 540 |
416 | zcmZvXI}XAy5JV>*2o(g0GDQlGKtUNL4F!luq~Hh?93lk;$DrUC6gdjVpo1A>2S;LM | 416 | zcmZvXI}XAy5JV>*2o(g0GDQlGKtUNL4F!luq~Hh?93lk;$DrUC6gdjVpo1A>2S;LM |
417 | z%e!y9_D)?lO%?*tuH09fLtY;1DrW=$l<UL-nCtYzvZcp@40!i-4orY_R*;0D)3(xE | 417 | z%e!y9_D)?lO%?*tuH09fLtY;1DrW=$l<UL-nCtYzvZcp@40!i-4orY_R*;0D)3(xE |
418 | zvk*rGivR<yGYC;)v;cfFC0cVUI4UmOCl#DQ+D*9&vMKY2t95$J__56O`b@nqZvA7z | 418 | zvk*rGivR<yGYC;)v;cfFC0cVUI4UmOCl#DQ+D*9&vMKY2t95$J__56O`b@nqZvA7z |
419 | z_KHOoxp}{3-usL_pDR7u{(Q!sPos6zc}G5}4ScFq|DT!EDy+||au;^4J6ZgPjXWlw | 419 | z_KHOoxp}{3-usL_pDR7u{(Q!sPos6zc}G5}4ScFq|DT!EDy+||au;^4J6ZgPjXWlw |
420 | S>h0TY?~`Ec-II5*#Ig@|86g1x | 420 | S>h0TY?~`Ec-II5*#Ig@|86g1x |
421 | 421 | ||
422 | literal 356 | 422 | literal 356 |
423 | zcmWFt2nk7HWME*P=H&0}5v<@85#X!<1VAAM5F11@h%hh+f@ov_6;nYI69Dopu!#Af | 423 | zcmWFt2nk7HWME*P=H&0}5v<@85#X!<1VAAM5F11@h%hh+f@ov_6;nYI69Dopu!#Af |
424 | ziSYsX2{^>Sc7o)9c7V(S=|vU;>74__Oh60<Ky@%NW+X9~TafjF#BRXUfM}@RH$Wx} | 424 | ziSYsX2{^>Sc7o)9c7V(S=|vU;>74__Oh60<Ky@%NW+X9~TafjF#BRXUfM}@RH$Wx} |
425 | cOdLs!6-f-H7uh_Jy&6CPHY9a0F?OgJ00?*x0RR91 | 425 | cOdLs!6-f-H7uh_Jy&6CPHY9a0F?OgJ00?*x0RR91 |
426 | 426 | ||
427 | diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios-tables-test-allowed-diff.h | 427 | diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios-tables-test-allowed-diff.h |
428 | index XXXXXXX..XXXXXXX 100644 | 428 | index XXXXXXX..XXXXXXX 100644 |
429 | --- a/tests/qtest/bios-tables-test-allowed-diff.h | 429 | --- a/tests/qtest/bios-tables-test-allowed-diff.h |
430 | +++ b/tests/qtest/bios-tables-test-allowed-diff.h | 430 | +++ b/tests/qtest/bios-tables-test-allowed-diff.h |
431 | @@ -1,2 +1 @@ | 431 | @@ -1,2 +1 @@ |
432 | /* List of comma-separated changed AML files to ignore */ | 432 | /* List of comma-separated changed AML files to ignore */ |
433 | -"tests/data/acpi/aarch64/virt/PPTT.topology", | 433 | -"tests/data/acpi/aarch64/virt/PPTT.topology", |
434 | -- | 434 | -- |
435 | 2.34.1 | 435 | 2.34.1 | diff view generated by jsdifflib |