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