1
Patches for rc1: nothing major, just some minor bugfixes and
1
Mostly straightforward bugfixes. The new Xilinx devices are
2
code cleanups.
2
arguably 'new feature', but they're fixing a regression where
3
our changes to PSCI in commit 3f37979bf mean that EL3 guest
4
code now needs to talk to a proper emulated power-controller
5
device to turn on secondary CPUs; and it's not yet rc1 and
6
they only affect the Xilinx board, so it seems OK to me.
3
7
8
thanks
4
-- PMM
9
-- PMM
5
10
6
The following changes since commit f7e1914adad8885a5d4c70239ab90d901ed97e9f:
11
The following changes since commit 1d60bb4b14601e38ed17384277aa4c30c57925d3:
7
12
8
Merge remote-tracking branch 'remotes/alistair/tags/pull-riscv-to-apply-20201109' into staging (2020-11-10 09:24:56 +0000)
13
Merge tag 'pull-request-2022-03-15v2' of https://gitlab.com/thuth/qemu into staging (2022-03-16 10:43:58 +0000)
9
14
10
are available in the Git repository at:
15
are available in the Git repository at:
11
16
12
https://git.linaro.org/people/pmaydell/qemu-arm.git tags/pull-target-arm-20201110
17
https://git.linaro.org/people/pmaydell/qemu-arm.git tags/pull-target-arm-20220318
13
18
14
for you to fetch changes up to b6c56c8a9a4064ea783f352f43c5df6231a110fa:
19
for you to fetch changes up to 79d54c9eac04c554e3c081589542f801ace71797:
15
20
16
target/arm/translate-neon.c: Handle VTBL UNDEF case before VFP access check (2020-11-10 11:03:48 +0000)
21
util/osdep: Remove some early cruft (2022-03-18 11:32:13 +0000)
17
22
18
----------------------------------------------------------------
23
----------------------------------------------------------------
19
target-arm queue:
24
target-arm queue:
20
* hw/arm/Kconfig: ARM_V7M depends on PTIMER
25
* Fix sve2 ldnt1 and stnt1
21
* Minor coding style fixes
26
* Fix pauth_check_trap vs SEL2
22
* docs: add some notes on the sbsa-ref machine
27
* Fix handling of LPAE block descriptors
23
* hw/arm/virt: Remove dependency on Cortex-A15 MPCore peripherals
28
* hw/dma/xlnx_csu_dma: Set TYPE_XLNX_CSU_DMA class_size
24
* target/arm: Fix neon VTBL/VTBX for len > 1
29
* hw/misc/npcm7xx_clk: Don't leak string in npcm7xx_clk_sel_init()
25
* hw/arm/armsse: Correct expansion MPC interrupt lines
30
* nsis installer: List emulators in alphabetical order
26
* hw/misc/stm32f2xx_syscfg: Remove extraneous IRQ
31
* nsis installer: Suppress "ANSI targets are deprecated" warning
27
* hw/arm/nseries: Remove invalid/unnecessary n8x0_uart_setup()
32
* nsis installer: Fix mouse-over descriptions for emulators
28
* hw/arm/musicpal: Don't connect two qemu_irqs directly to the same input
33
* hw/arm/virt: Fix gic-version=max when CONFIG_ARM_GICV3_TCG is unset
29
* hw/arm/musicpal: Only use qdev_get_gpio_in() when necessary
34
* Improve M-profile vector table access logging
30
* hw/arm/nseries: Check return value from load_image_targphys()
35
* Xilinx ZynqMP: model CRF and APU control
31
* tests/qtest/npcm7xx_rng-test: count runs properly
36
* Fix compile issues on modern Solaris
32
* target/arm/translate-neon.c: Handle VTBL UNDEF case before VFP access check
33
37
34
----------------------------------------------------------------
38
----------------------------------------------------------------
35
Alex Bennée (1):
39
Andrew Deason (3):
36
docs: add some notes on the sbsa-ref machine
40
util/osdep: Avoid madvise proto on modern Solaris
41
hw/i386/acpi-build: Avoid 'sun' identifier
42
util/osdep: Remove some early cruft
37
43
38
AlexChen (1):
44
Edgar E. Iglesias (6):
39
ssi: Fix bad printf format specifiers
45
hw/arm/xlnx-zynqmp: Add an unimplemented SERDES area
46
target/arm: Make rvbar settable after realize
47
hw/misc: Add a model of the Xilinx ZynqMP CRF
48
hw/arm/xlnx-zynqmp: Connect the ZynqMP CRF
49
hw/misc: Add a model of the Xilinx ZynqMP APU Control
50
hw/arm/xlnx-zynqmp: Connect the ZynqMP APU Control
40
51
41
Andrew Jones (1):
52
Eric Auger (2):
42
hw/arm/Kconfig: ARM_V7M depends on PTIMER
53
hw/intc: Rename CONFIG_ARM_GIC_TCG into CONFIG_ARM_GICV3_TCG
54
hw/arm/virt: Fix gic-version=max when CONFIG_ARM_GICV3_TCG is unset
43
55
44
Havard Skinnemoen (1):
56
Peter Maydell (8):
45
tests/qtest/npcm7xx_rng-test: count runs properly
57
target/arm: Fix handling of LPAE block descriptors
58
hw/dma/xlnx_csu_dma: Set TYPE_XLNX_CSU_DMA class_size
59
hw/misc/npcm7xx_clk: Don't leak string in npcm7xx_clk_sel_init()
60
nsis installer: List emulators in alphabetical order
61
nsis installer: Suppress "ANSI targets are deprecated" warning
62
nsis installer: Fix mouse-over descriptions for emulators
63
target/arm: Log M-profile vector table accesses
64
target/arm: Log fault address for M-profile faults
46
65
47
Peter Maydell (2):
66
Richard Henderson (2):
48
hw/arm/nseries: Check return value from load_image_targphys()
67
target/arm: Fix sve2 ldnt1 and stnt1
49
target/arm/translate-neon.c: Handle VTBL UNDEF case before VFP access check
68
target/arm: Fix pauth_check_trap vs SEL2
50
69
51
Philippe Mathieu-Daudé (6):
70
meson.build | 23 ++-
52
hw/arm/virt: Remove dependency on Cortex-A15 MPCore peripherals
71
include/hw/arm/xlnx-zynqmp.h | 4 +
53
hw/arm/armsse: Correct expansion MPC interrupt lines
72
include/hw/misc/xlnx-zynqmp-apu-ctrl.h | 93 ++++++++++++
54
hw/misc/stm32f2xx_syscfg: Remove extraneous IRQ
73
include/hw/misc/xlnx-zynqmp-crf.h | 211 ++++++++++++++++++++++++++
55
hw/arm/nseries: Remove invalid/unnecessary n8x0_uart_setup()
74
include/qemu/osdep.h | 8 +
56
hw/arm/musicpal: Don't connect two qemu_irqs directly to the same input
75
target/arm/cpu.h | 3 +-
57
hw/arm/musicpal: Only use qdev_get_gpio_in() when necessary
76
target/arm/sve.decode | 5 +-
58
77
hw/arm/virt.c | 7 +-
59
Richard Henderson (1):
78
hw/arm/xlnx-zynqmp.c | 46 +++++-
60
target/arm: Fix neon VTBL/VTBX for len > 1
79
hw/dma/xlnx_csu_dma.c | 1 +
61
80
hw/i386/acpi-build.c | 4 +-
62
Xinhao Zhang (3):
81
hw/misc/npcm7xx_clk.c | 4 +-
63
target/arm: add spaces around operator
82
hw/misc/xlnx-zynqmp-apu-ctrl.c | 253 +++++++++++++++++++++++++++++++
64
target/arm: Don't use '#' flag of printf format
83
hw/misc/xlnx-zynqmp-crf.c | 266 +++++++++++++++++++++++++++++++++
65
target/arm: add space before the open parenthesis '('
84
target/arm/cpu.c | 17 ++-
66
85
target/arm/helper.c | 20 ++-
67
docs/system/arm/sbsa.rst | 32 ++++++++++++++++++++++
86
target/arm/m_helper.c | 11 ++
68
docs/system/target-arm.rst | 1 +
87
target/arm/pauth_helper.c | 2 +-
69
include/hw/misc/stm32f2xx_syscfg.h | 2 --
88
target/arm/translate-sve.c | 51 ++++++-
70
target/arm/helper.h | 2 +-
89
tests/tcg/aarch64/test-826.c | 50 +++++++
71
hw/arm/armsse.c | 3 +-
90
util/osdep.c | 10 --
72
hw/arm/musicpal.c | 40 +++++++++++++++++----------
91
hw/intc/Kconfig | 2 +-
73
hw/arm/nseries.c | 26 ++++++++----------
92
hw/intc/meson.build | 4 +-
74
hw/arm/stm32f205_soc.c | 1 -
93
hw/misc/meson.build | 2 +
75
hw/misc/stm32f2xx_syscfg.c | 2 --
94
qemu.nsi | 8 +-
76
hw/ssi/imx_spi.c | 2 +-
95
scripts/nsis.py | 17 ++-
77
hw/ssi/xilinx_spi.c | 2 +-
96
tests/tcg/aarch64/Makefile.target | 4 +
78
target/arm/arch_dump.c | 8 +++---
97
tests/tcg/configure.sh | 4 +
79
target/arm/arm-semi.c | 8 +++---
98
28 files changed, 1084 insertions(+), 46 deletions(-)
80
target/arm/helper.c | 2 +-
99
create mode 100644 include/hw/misc/xlnx-zynqmp-apu-ctrl.h
81
target/arm/op_helper.c | 23 +++++++++-------
100
create mode 100644 include/hw/misc/xlnx-zynqmp-crf.h
82
target/arm/translate-a64.c | 4 +--
101
create mode 100644 hw/misc/xlnx-zynqmp-apu-ctrl.c
83
target/arm/translate.c | 2 +-
102
create mode 100644 hw/misc/xlnx-zynqmp-crf.c
84
tests/qtest/npcm7xx_rng-test.c | 2 +-
103
create mode 100644 tests/tcg/aarch64/test-826.c
85
hw/arm/Kconfig | 3 +-
86
target/arm/translate-neon.c.inc | 56 ++++++++++++++------------------------
87
20 files changed, 123 insertions(+), 98 deletions(-)
88
create mode 100644 docs/system/arm/sbsa.rst
89
diff view generated by jsdifflib
1
From: Richard Henderson <richard.henderson@linaro.org>
1
From: Richard Henderson <richard.henderson@linaro.org>
2
2
3
The helper function did not get updated when we reorganized
3
For both ldnt1 and stnt1, the meaning of the Rn and Rm are different
4
the vector register file for SVE. Since then, the neon dregs
4
from ld1 and st1: the vector and integer registers are reversed, and
5
are non-sequential and cannot be simply indexed.
5
the integer register 31 refers to XZR instead of SP.
6
6
7
At the same time, make the helper function operate on 64-bit
7
Secondly, the 64-bit version of ldnt1 was being interpreted as
8
quantities so that we do not have to call it twice.
8
32-bit unpacked unscaled offset instead of 64-bit unscaled offset,
9
9
which discarded the upper 32 bits of the address coming from
10
Fixes: c39c2b9043e
10
the vector argument.
11
Reported-by: Ard Biesheuvel <ardb@kernel.org>
11
12
Thirdly, validate that the memory element size is in range for the
13
vector element size for ldnt1. For ld1, we do this via independent
14
decode patterns, but for ldnt1 we need to do it manually.
15
16
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/826
12
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
17
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
13
[PMM: use aa32_vfp_dreg() rather than opencoding]
14
Message-id: 20201105171126.88014-1-richard.henderson@linaro.org
15
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
18
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
19
Message-id: 20220308031655.240710-1-richard.henderson@linaro.org
16
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
20
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
17
---
21
---
18
target/arm/helper.h | 2 +-
22
target/arm/sve.decode | 5 ++-
19
target/arm/op_helper.c | 23 +++++++++--------
23
target/arm/translate-sve.c | 51 +++++++++++++++++++++++++++++--
20
target/arm/translate-neon.c.inc | 44 +++++++++++----------------------
24
tests/tcg/aarch64/test-826.c | 50 ++++++++++++++++++++++++++++++
21
3 files changed, 29 insertions(+), 40 deletions(-)
25
tests/tcg/aarch64/Makefile.target | 4 +++
22
26
tests/tcg/configure.sh | 4 +++
23
diff --git a/target/arm/helper.h b/target/arm/helper.h
27
5 files changed, 109 insertions(+), 5 deletions(-)
28
create mode 100644 tests/tcg/aarch64/test-826.c
29
30
diff --git a/target/arm/sve.decode b/target/arm/sve.decode
24
index XXXXXXX..XXXXXXX 100644
31
index XXXXXXX..XXXXXXX 100644
25
--- a/target/arm/helper.h
32
--- a/target/arm/sve.decode
26
+++ b/target/arm/helper.h
33
+++ b/target/arm/sve.decode
27
@@ -XXX,XX +XXX,XX @@ DEF_HELPER_FLAGS_2(rsqrte_f32, TCG_CALL_NO_RWG, f32, f32, ptr)
34
@@ -XXX,XX +XXX,XX @@ USDOT_zzzz 01000100 .. 0 ..... 011 110 ..... ..... @rda_rn_rm
28
DEF_HELPER_FLAGS_2(rsqrte_f64, TCG_CALL_NO_RWG, f64, f64, ptr)
35
29
DEF_HELPER_FLAGS_1(recpe_u32, TCG_CALL_NO_RWG, i32, i32)
36
### SVE2 Memory Gather Load Group
30
DEF_HELPER_FLAGS_1(rsqrte_u32, TCG_CALL_NO_RWG, i32, i32)
37
31
-DEF_HELPER_FLAGS_4(neon_tbl, TCG_CALL_NO_RWG, i32, i32, i32, ptr, i32)
38
-# SVE2 64-bit gather non-temporal load
32
+DEF_HELPER_FLAGS_4(neon_tbl, TCG_CALL_NO_RWG, i64, env, i32, i64, i64)
39
-# (scalar plus unpacked 32-bit unscaled offsets)
33
40
+# SVE2 64-bit gather non-temporal load (scalar plus 64-bit unscaled offsets)
34
DEF_HELPER_3(shl_cc, i32, env, i32, i32)
41
LDNT1_zprz 1100010 msz:2 00 rm:5 1 u:1 0 pg:3 rn:5 rd:5 \
35
DEF_HELPER_3(shr_cc, i32, env, i32, i32)
42
- &rprr_gather_load xs=0 esz=3 scale=0 ff=0
36
diff --git a/target/arm/op_helper.c b/target/arm/op_helper.c
43
+ &rprr_gather_load xs=2 esz=3 scale=0 ff=0
44
45
# SVE2 32-bit gather non-temporal load (scalar plus 32-bit unscaled offsets)
46
LDNT1_zprz 1000010 msz:2 00 rm:5 10 u:1 pg:3 rn:5 rd:5 \
47
diff --git a/target/arm/translate-sve.c b/target/arm/translate-sve.c
37
index XXXXXXX..XXXXXXX 100644
48
index XXXXXXX..XXXXXXX 100644
38
--- a/target/arm/op_helper.c
49
--- a/target/arm/translate-sve.c
39
+++ b/target/arm/op_helper.c
50
+++ b/target/arm/translate-sve.c
40
@@ -XXX,XX +XXX,XX @@ void raise_exception_ra(CPUARMState *env, uint32_t excp, uint32_t syndrome,
51
@@ -XXX,XX +XXX,XX @@ static bool trans_LD1_zpiz(DisasContext *s, arg_LD1_zpiz *a)
41
cpu_loop_exit_restore(cs, ra);
52
42
}
53
static bool trans_LDNT1_zprz(DisasContext *s, arg_LD1_zprz *a)
43
44
-uint32_t HELPER(neon_tbl)(uint32_t ireg, uint32_t def, void *vn,
45
- uint32_t maxindex)
46
+uint64_t HELPER(neon_tbl)(CPUARMState *env, uint32_t desc,
47
+ uint64_t ireg, uint64_t def)
48
{
54
{
49
- uint32_t val, shift;
55
+ gen_helper_gvec_mem_scatter *fn = NULL;
50
- uint64_t *table = vn;
56
+ bool be = s->be_data == MO_BE;
51
+ uint64_t tmp, val = 0;
57
+ bool mte = s->mte_active[0];
52
+ uint32_t maxindex = ((desc & 3) + 1) * 8;
58
+
53
+ uint32_t base_reg = desc >> 2;
59
+ if (a->esz < a->msz + !a->u) {
54
+ uint32_t shift, index, reg;
60
+ return false;
55
61
+ }
56
- val = 0;
62
if (!dc_isar_feature(aa64_sve2, s)) {
57
- for (shift = 0; shift < 32; shift += 8) {
58
- uint32_t index = (ireg >> shift) & 0xff;
59
+ for (shift = 0; shift < 64; shift += 8) {
60
+ index = (ireg >> shift) & 0xff;
61
if (index < maxindex) {
62
- uint32_t tmp = (table[index >> 3] >> ((index & 7) << 3)) & 0xff;
63
- val |= tmp << shift;
64
+ reg = base_reg + (index >> 3);
65
+ tmp = *aa32_vfp_dreg(env, reg);
66
+ tmp = ((tmp >> ((index & 7) << 3)) & 0xff) << shift;
67
} else {
68
- val |= def & (0xff << shift);
69
+ tmp = def & (0xffull << shift);
70
}
71
+ val |= tmp;
72
}
73
return val;
74
}
75
diff --git a/target/arm/translate-neon.c.inc b/target/arm/translate-neon.c.inc
76
index XXXXXXX..XXXXXXX 100644
77
--- a/target/arm/translate-neon.c.inc
78
+++ b/target/arm/translate-neon.c.inc
79
@@ -XXX,XX +XXX,XX @@ static bool trans_VEXT(DisasContext *s, arg_VEXT *a)
80
81
static bool trans_VTBL(DisasContext *s, arg_VTBL *a)
82
{
83
- int n;
84
- TCGv_i32 tmp, tmp2, tmp3, tmp4;
85
- TCGv_ptr ptr1;
86
+ TCGv_i64 val, def;
87
+ TCGv_i32 desc;
88
89
if (!arm_dc_feature(s, ARM_FEATURE_NEON)) {
90
return false;
91
@@ -XXX,XX +XXX,XX @@ static bool trans_VTBL(DisasContext *s, arg_VTBL *a)
92
return true;
93
}
94
95
- n = a->len + 1;
96
- if ((a->vn + n) > 32) {
97
+ if ((a->vn + a->len + 1) > 32) {
98
/*
99
* This is UNPREDICTABLE; we choose to UNDEF to avoid the
100
* helper function running off the end of the register file.
101
*/
102
return false;
63
return false;
103
}
64
}
104
- n <<= 3;
65
- return trans_LD1_zprz(s, a);
105
- tmp = tcg_temp_new_i32();
66
+ if (!sve_access_check(s)) {
106
- if (a->op) {
67
+ return true;
107
- read_neon_element32(tmp, a->vd, 0, MO_32);
68
+ }
108
- } else {
69
+
109
- tcg_gen_movi_i32(tmp, 0);
70
+ switch (a->esz) {
110
- }
71
+ case MO_32:
111
- tmp2 = tcg_temp_new_i32();
72
+ fn = gather_load_fn32[mte][be][0][0][a->u][a->msz];
112
- read_neon_element32(tmp2, a->vm, 0, MO_32);
73
+ break;
113
- ptr1 = vfp_reg_ptr(true, a->vn);
74
+ case MO_64:
114
- tmp4 = tcg_const_i32(n);
75
+ fn = gather_load_fn64[mte][be][0][2][a->u][a->msz];
115
- gen_helper_neon_tbl(tmp2, tmp2, tmp, ptr1, tmp4);
76
+ break;
116
77
+ }
117
+ desc = tcg_const_i32((a->vn << 2) | a->len);
78
+ assert(fn != NULL);
118
+ def = tcg_temp_new_i64();
79
+
119
if (a->op) {
80
+ do_mem_zpz(s, a->rd, a->pg, a->rn, 0,
120
- read_neon_element32(tmp, a->vd, 1, MO_32);
81
+ cpu_reg(s, a->rm), a->msz, false, fn);
121
+ read_neon_element64(def, a->vd, 0, MO_64);
82
+ return true;
122
} else {
83
}
123
- tcg_gen_movi_i32(tmp, 0);
84
124
+ tcg_gen_movi_i64(def, 0);
85
/* Indexed by [mte][be][xs][msz]. */
86
@@ -XXX,XX +XXX,XX @@ static bool trans_ST1_zpiz(DisasContext *s, arg_ST1_zpiz *a)
87
88
static bool trans_STNT1_zprz(DisasContext *s, arg_ST1_zprz *a)
89
{
90
+ gen_helper_gvec_mem_scatter *fn;
91
+ bool be = s->be_data == MO_BE;
92
+ bool mte = s->mte_active[0];
93
+
94
+ if (a->esz < a->msz) {
95
+ return false;
96
+ }
97
if (!dc_isar_feature(aa64_sve2, s)) {
98
return false;
125
}
99
}
126
- tmp3 = tcg_temp_new_i32();
100
- return trans_ST1_zprz(s, a);
127
- read_neon_element32(tmp3, a->vm, 1, MO_32);
101
+ if (!sve_access_check(s)) {
128
- gen_helper_neon_tbl(tmp3, tmp3, tmp, ptr1, tmp4);
102
+ return true;
129
- tcg_temp_free_i32(tmp);
103
+ }
130
- tcg_temp_free_i32(tmp4);
104
+
131
- tcg_temp_free_ptr(ptr1);
105
+ switch (a->esz) {
132
+ val = tcg_temp_new_i64();
106
+ case MO_32:
133
+ read_neon_element64(val, a->vm, 0, MO_64);
107
+ fn = scatter_store_fn32[mte][be][0][a->msz];
134
108
+ break;
135
- write_neon_element32(tmp2, a->vd, 0, MO_32);
109
+ case MO_64:
136
- write_neon_element32(tmp3, a->vd, 1, MO_32);
110
+ fn = scatter_store_fn64[mte][be][2][a->msz];
137
- tcg_temp_free_i32(tmp2);
111
+ break;
138
- tcg_temp_free_i32(tmp3);
112
+ default:
139
+ gen_helper_neon_tbl(val, cpu_env, desc, val, def);
113
+ g_assert_not_reached();
140
+ write_neon_element64(val, a->vd, 0, MO_64);
114
+ }
141
+
115
+
142
+ tcg_temp_free_i64(def);
116
+ do_mem_zpz(s, a->rd, a->pg, a->rn, 0,
143
+ tcg_temp_free_i64(val);
117
+ cpu_reg(s, a->rm), a->msz, true, fn);
144
+ tcg_temp_free_i32(desc);
118
+ return true;
145
return true;
146
}
119
}
147
120
121
/*
122
diff --git a/tests/tcg/aarch64/test-826.c b/tests/tcg/aarch64/test-826.c
123
new file mode 100644
124
index XXXXXXX..XXXXXXX
125
--- /dev/null
126
+++ b/tests/tcg/aarch64/test-826.c
127
@@ -XXX,XX +XXX,XX @@
128
+#include <sys/mman.h>
129
+#include <unistd.h>
130
+#include <signal.h>
131
+#include <stdlib.h>
132
+#include <stdio.h>
133
+#include <assert.h>
134
+
135
+static void *expected;
136
+
137
+void sigsegv(int sig, siginfo_t *info, void *vuc)
138
+{
139
+ ucontext_t *uc = vuc;
140
+
141
+ assert(info->si_addr == expected);
142
+ uc->uc_mcontext.pc += 4;
143
+}
144
+
145
+int main()
146
+{
147
+ struct sigaction sa = {
148
+ .sa_sigaction = sigsegv,
149
+ .sa_flags = SA_SIGINFO
150
+ };
151
+
152
+ void *page;
153
+ long ofs;
154
+
155
+ if (sigaction(SIGSEGV, &sa, NULL) < 0) {
156
+ perror("sigaction");
157
+ return EXIT_FAILURE;
158
+ }
159
+
160
+ page = mmap(0, getpagesize(), PROT_NONE, MAP_PRIVATE | MAP_ANON, -1, 0);
161
+ if (page == MAP_FAILED) {
162
+ perror("mmap");
163
+ return EXIT_FAILURE;
164
+ }
165
+
166
+ ofs = 0x124;
167
+ expected = page + ofs;
168
+
169
+ asm("ptrue p0.d, vl1\n\t"
170
+ "dup z0.d, %0\n\t"
171
+ "ldnt1h {z1.d}, p0/z, [z0.d, %1]\n\t"
172
+ "dup z1.d, %1\n\t"
173
+ "ldnt1h {z0.d}, p0/z, [z1.d, %0]"
174
+ : : "r"(page), "r"(ofs) : "v0", "v1");
175
+
176
+ return EXIT_SUCCESS;
177
+}
178
diff --git a/tests/tcg/aarch64/Makefile.target b/tests/tcg/aarch64/Makefile.target
179
index XXXXXXX..XXXXXXX 100644
180
--- a/tests/tcg/aarch64/Makefile.target
181
+++ b/tests/tcg/aarch64/Makefile.target
182
@@ -XXX,XX +XXX,XX @@ run-gdbstub-sve-ioctls: sve-ioctls
183
184
EXTRA_RUNS += run-gdbstub-sysregs run-gdbstub-sve-ioctls
185
endif
186
+endif
187
188
+ifneq ($(DOCKER_IMAGE)$(CROSS_CC_HAS_SVE2),)
189
+AARCH64_TESTS += test-826
190
+test-826: CFLAGS+=-march=armv8.1-a+sve2
191
endif
192
193
TESTS += $(AARCH64_TESTS)
194
diff --git a/tests/tcg/configure.sh b/tests/tcg/configure.sh
195
index XXXXXXX..XXXXXXX 100755
196
--- a/tests/tcg/configure.sh
197
+++ b/tests/tcg/configure.sh
198
@@ -XXX,XX +XXX,XX @@ for target in $target_list; do
199
-march=armv8.1-a+sve -o $TMPE $TMPC; then
200
echo "CROSS_CC_HAS_SVE=y" >> $config_target_mak
201
fi
202
+ if do_compiler "$target_compiler" $target_compiler_cflags \
203
+ -march=armv8.1-a+sve2 -o $TMPE $TMPC; then
204
+ echo "CROSS_CC_HAS_SVE2=y" >> $config_target_mak
205
+ fi
206
if do_compiler "$target_compiler" $target_compiler_cflags \
207
-march=armv8.3-a -o $TMPE $TMPC; then
208
echo "CROSS_CC_HAS_ARMV8_3=y" >> $config_target_mak
148
--
209
--
149
2.20.1
210
2.25.1
150
151
diff view generated by jsdifflib
1
From: Xinhao Zhang <zhangxinhao1@huawei.com>
1
From: Richard Henderson <richard.henderson@linaro.org>
2
2
3
Fix code style. Space required before the open parenthesis '('.
3
When arm_is_el2_enabled was introduced, we missed
4
updating pauth_check_trap.
4
5
5
Signed-off-by: Xinhao Zhang <zhangxinhao1@huawei.com>
6
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/788
6
Signed-off-by: Kai Deng <dengkai1@huawei.com>
7
Fixes: e6ef0169264b ("target/arm: use arm_is_el2_enabled() where applicable")
7
Message-id: 20201103114529.638233-3-zhangxinhao1@huawei.com
8
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
8
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
9
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
10
Message-id: 20220315021205.342768-1-richard.henderson@linaro.org
9
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
11
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
10
---
12
---
11
target/arm/translate.c | 2 +-
13
target/arm/pauth_helper.c | 2 +-
12
1 file changed, 1 insertion(+), 1 deletion(-)
14
1 file changed, 1 insertion(+), 1 deletion(-)
13
15
14
diff --git a/target/arm/translate.c b/target/arm/translate.c
16
diff --git a/target/arm/pauth_helper.c b/target/arm/pauth_helper.c
15
index XXXXXXX..XXXXXXX 100644
17
index XXXXXXX..XXXXXXX 100644
16
--- a/target/arm/translate.c
18
--- a/target/arm/pauth_helper.c
17
+++ b/target/arm/translate.c
19
+++ b/target/arm/pauth_helper.c
18
@@ -XXX,XX +XXX,XX @@ static void arm_tr_tb_stop(DisasContextBase *dcbase, CPUState *cpu)
20
@@ -XXX,XX +XXX,XX @@ static void QEMU_NORETURN pauth_trap(CPUARMState *env, int target_el,
19
- Hardware watchpoints.
21
20
Hardware breakpoints have already been handled and skip this code.
22
static void pauth_check_trap(CPUARMState *env, int el, uintptr_t ra)
21
*/
23
{
22
- switch(dc->base.is_jmp) {
24
- if (el < 2 && arm_feature(env, ARM_FEATURE_EL2)) {
23
+ switch (dc->base.is_jmp) {
25
+ if (el < 2 && arm_is_el2_enabled(env)) {
24
case DISAS_NEXT:
26
uint64_t hcr = arm_hcr_el2_eff(env);
25
case DISAS_TOO_MANY:
27
bool trap = !(hcr & HCR_API);
26
gen_goto_tb(dc, 1, dc->base.pc_next);
28
if (el == 0) {
27
--
29
--
28
2.20.1
30
2.25.1
29
31
30
32
diff view generated by jsdifflib
New patch
1
LPAE descriptors come in three forms:
1
2
3
* table descriptors, giving the address of the next level page table
4
* page descriptors, which occur only at level 3 and describe the
5
mapping of one page (which might be 4K, 16K or 64K)
6
* block descriptors, which occur at higher page table levels, and
7
describe the mapping of huge pages
8
9
QEMU's page-table-walk code treats block and page entries
10
identically, simply ORing in a number of bits from the input virtual
11
address that depends on the level of the page table that we stopped
12
at; we depend on the previous masking of descaddr with descaddrmask
13
to have already cleared out the low bits of the descriptor word.
14
15
This is not quite right: the address field in a block descriptor is
16
smaller, and so there are bits which are valid address bits in a page
17
descriptor or a table descriptor but which are not supposed to be
18
part of the address in a block descriptor, and descaddrmask does not
19
clear them. We previously mostly got away with this because those
20
descriptor bits are RES0; however with FEAT_BBM (part of Armv8.4)
21
block descriptor bit 16 is defined to be the nT bit. No emulated
22
QEMU CPU has FEAT_BBM yet, but if the host CPU has it then we might
23
see it when using KVM or hvf.
24
25
Explicitly zero out all the descaddr bits we're about to OR vaddr
26
bits into.
27
28
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/790
29
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
30
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
31
Message-id: 20220304165628.2345765-1-peter.maydell@linaro.org
32
---
33
target/arm/helper.c | 10 ++++++++--
34
1 file changed, 8 insertions(+), 2 deletions(-)
35
36
diff --git a/target/arm/helper.c b/target/arm/helper.c
37
index XXXXXXX..XXXXXXX 100644
38
--- a/target/arm/helper.c
39
+++ b/target/arm/helper.c
40
@@ -XXX,XX +XXX,XX @@ static bool get_phys_addr_lpae(CPUARMState *env, uint64_t address,
41
indexmask = indexmask_grainsize;
42
continue;
43
}
44
- /* Block entry at level 1 or 2, or page entry at level 3.
45
+ /*
46
+ * Block entry at level 1 or 2, or page entry at level 3.
47
* These are basically the same thing, although the number
48
- * of bits we pull in from the vaddr varies.
49
+ * of bits we pull in from the vaddr varies. Note that although
50
+ * descaddrmask masks enough of the low bits of the descriptor
51
+ * to give a correct page or table address, the address field
52
+ * in a block descriptor is smaller; so we need to explicitly
53
+ * clear the lower bits here before ORing in the low vaddr bits.
54
*/
55
page_size = (1ULL << ((stride * (4 - level)) + 3));
56
+ descaddr &= ~(page_size - 1);
57
descaddr |= (address & (page_size - 1));
58
/* Extract attributes from the descriptor */
59
attrs = extract64(descriptor, 2, 10)
60
--
61
2.25.1
diff view generated by jsdifflib
1
From: Andrew Jones <drjones@redhat.com>
1
In commit 00f05c02f9e7342f we gave the TYPE_XLNX_CSU_DMA object its
2
own class struct, but forgot to update the TypeInfo::class_size
3
accordingly. This meant that not enough memory was allocated for the
4
class struct, and the initialization of xcdc->read in the class init
5
function wrote off the end of the memory. Add the missing line.
2
6
3
commit 32bd322a0134 ("hw/timer/armv7m_systick: Rewrite to use ptimers")
7
Found by running 'check-qtest-aarch64' with a clang
4
changed armv7m_systick to build on ptimers. Make sure we have ptimers
8
address-sanitizer build, which complains:
5
in the build when building armv7m_systick.
6
9
7
Signed-off-by: Andrew Jones <drjones@redhat.com>
10
==2542634==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x61000000ab00 at pc 0x559a20aebc29 bp 0x7fff97df74d0 sp 0x7fff97df74c8
8
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
11
WRITE of size 8 at 0x61000000ab00 thread T0
9
Message-id: 20201104103343.30392-1-drjones@redhat.com
12
#0 0x559a20aebc28 in xlnx_csu_dma_class_init /mnt/nvmedisk/linaro/qemu-from-laptop/qemu/build/san/../../hw/dma/xlnx_csu_dma.c:722:16
13
#1 0x559a21bf297c in type_initialize /mnt/nvmedisk/linaro/qemu-from-laptop/qemu/build/san/../../qom/object.c:365:9
14
#2 0x559a21bf3442 in object_class_foreach_tramp /mnt/nvmedisk/linaro/qemu-from-laptop/qemu/build/san/../../qom/object.c:1070:5
15
#3 0x7f09bcb641b7 in g_hash_table_foreach (/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x401b7)
16
#4 0x559a21bf3c27 in object_class_foreach /mnt/nvmedisk/linaro/qemu-from-laptop/qemu/build/san/../../qom/object.c:1092:5
17
#5 0x559a21bf3c27 in object_class_get_list /mnt/nvmedisk/linaro/qemu-from-laptop/qemu/build/san/../../qom/object.c:1149:5
18
#6 0x559a2081a2fd in select_machine /mnt/nvmedisk/linaro/qemu-from-laptop/qemu/build/san/../../softmmu/vl.c:1661:24
19
#7 0x559a2081a2fd in qemu_create_machine /mnt/nvmedisk/linaro/qemu-from-laptop/qemu/build/san/../../softmmu/vl.c:2146:35
20
#8 0x559a2081a2fd in qemu_init /mnt/nvmedisk/linaro/qemu-from-laptop/qemu/build/san/../../softmmu/vl.c:3706:5
21
#9 0x559a20720ed5 in main /mnt/nvmedisk/linaro/qemu-from-laptop/qemu/build/san/../../softmmu/main.c:49:5
22
#10 0x7f09baec00b2 in __libc_start_main /build/glibc-sMfBJT/glibc-2.31/csu/../csu/libc-start.c:308:16
23
#11 0x559a2067673d in _start (/mnt/nvmedisk/linaro/qemu-from-laptop/qemu/build/san/qemu-system-aarch64+0xf4b73d)
24
25
0x61000000ab00 is located 0 bytes to the right of 192-byte region [0x61000000aa40,0x61000000ab00)
26
allocated by thread T0 here:
27
#0 0x559a206eeff2 in calloc (/mnt/nvmedisk/linaro/qemu-from-laptop/qemu/build/san/qemu-system-aarch64+0xfc3ff2)
28
#1 0x7f09bcb7bef0 in g_malloc0 (/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x57ef0)
29
#2 0x559a21bf3442 in object_class_foreach_tramp /mnt/nvmedisk/linaro/qemu-from-laptop/qemu/build/san/../../qom/object.c:1070:5
30
31
Fixes: 00f05c02f9e7342f ("hw/dma/xlnx_csu_dma: Support starting a read transfer through a class method")
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
32
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
33
Reviewed-by: Francisco Iglesias <francisco.iglesias@xilinx.com>
34
Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
35
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
36
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
37
Message-id: 20220308150207.2546272-1-peter.maydell@linaro.org
11
---
38
---
12
hw/arm/Kconfig | 1 +
39
hw/dma/xlnx_csu_dma.c | 1 +
13
1 file changed, 1 insertion(+)
40
1 file changed, 1 insertion(+)
14
41
15
diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig
42
diff --git a/hw/dma/xlnx_csu_dma.c b/hw/dma/xlnx_csu_dma.c
16
index XXXXXXX..XXXXXXX 100644
43
index XXXXXXX..XXXXXXX 100644
17
--- a/hw/arm/Kconfig
44
--- a/hw/dma/xlnx_csu_dma.c
18
+++ b/hw/arm/Kconfig
45
+++ b/hw/dma/xlnx_csu_dma.c
19
@@ -XXX,XX +XXX,XX @@ config ZYNQ
46
@@ -XXX,XX +XXX,XX @@ static const TypeInfo xlnx_csu_dma_info = {
20
47
.parent = TYPE_SYS_BUS_DEVICE,
21
config ARM_V7M
48
.instance_size = sizeof(XlnxCSUDMA),
22
bool
49
.class_init = xlnx_csu_dma_class_init,
23
+ select PTIMER
50
+ .class_size = sizeof(XlnxCSUDMAClass),
24
51
.instance_init = xlnx_csu_dma_init,
25
config ALLWINNER_A10
52
.interfaces = (InterfaceInfo[]) {
26
bool
53
{ TYPE_STREAM_SINK },
27
--
54
--
28
2.20.1
55
2.25.1
29
56
30
57
diff view generated by jsdifflib
1
Checks for UNDEF cases should go before the "is VFP enabled?" access
1
In npcm7xx_clk_sel_init() we allocate a string with g_strdup_printf().
2
check, except in special cases. Move a stray UNDEF check in the VTBL
2
Use g_autofree so we free it rather than leaking it.
3
trans function up above the access check.
3
4
(Detected with the clang leak sanitizer.)
4
5
5
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
6
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
6
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
7
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
7
Message-id: 20201109145324.2859-1-peter.maydell@linaro.org
8
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
9
Message-id: 20220308170302.2582820-1-peter.maydell@linaro.org
8
---
10
---
9
target/arm/translate-neon.c.inc | 8 ++++----
11
hw/misc/npcm7xx_clk.c | 4 ++--
10
1 file changed, 4 insertions(+), 4 deletions(-)
12
1 file changed, 2 insertions(+), 2 deletions(-)
11
13
12
diff --git a/target/arm/translate-neon.c.inc b/target/arm/translate-neon.c.inc
14
diff --git a/hw/misc/npcm7xx_clk.c b/hw/misc/npcm7xx_clk.c
13
index XXXXXXX..XXXXXXX 100644
15
index XXXXXXX..XXXXXXX 100644
14
--- a/target/arm/translate-neon.c.inc
16
--- a/hw/misc/npcm7xx_clk.c
15
+++ b/target/arm/translate-neon.c.inc
17
+++ b/hw/misc/npcm7xx_clk.c
16
@@ -XXX,XX +XXX,XX @@ static bool trans_VTBL(DisasContext *s, arg_VTBL *a)
18
@@ -XXX,XX +XXX,XX @@ static void npcm7xx_clk_sel_init(Object *obj)
17
return false;
19
NPCM7xxClockSELState *sel = NPCM7XX_CLOCK_SEL(obj);
20
21
for (i = 0; i < NPCM7XX_CLK_SEL_MAX_INPUT; ++i) {
22
- sel->clock_in[i] = qdev_init_clock_in(DEVICE(sel),
23
- g_strdup_printf("clock-in[%d]", i),
24
+ g_autofree char *s = g_strdup_printf("clock-in[%d]", i);
25
+ sel->clock_in[i] = qdev_init_clock_in(DEVICE(sel), s,
26
npcm7xx_clk_update_sel_cb, sel, ClockUpdate);
18
}
27
}
19
28
sel->clock_out = qdev_init_clock_out(DEVICE(sel), "clock-out");
20
- if (!vfp_access_check(s)) {
21
- return true;
22
- }
23
-
24
if ((a->vn + a->len + 1) > 32) {
25
/*
26
* This is UNPREDICTABLE; we choose to UNDEF to avoid the
27
@@ -XXX,XX +XXX,XX @@ static bool trans_VTBL(DisasContext *s, arg_VTBL *a)
28
return false;
29
}
30
31
+ if (!vfp_access_check(s)) {
32
+ return true;
33
+ }
34
+
35
desc = tcg_const_i32((a->vn << 2) | a->len);
36
def = tcg_temp_new_i64();
37
if (a->op) {
38
--
29
--
39
2.20.1
30
2.25.1
40
31
41
32
diff view generated by jsdifflib
1
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
1
We currently list the emulators in the Windows installer's dialog
2
in an essentially random order (it's whatever glob.glob() returns
3
them to, which is filesystem-implementation-dependent). Add a
4
call to sorted() so they appear in alphabetical order.
2
5
3
We don't need to fill the full pic[] array if we only use
6
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
4
few of the interrupt lines. Directly call qdev_get_gpio_in()
7
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
5
when necessary.
8
Reviewed-by: Stefan Weil <sw@weilnetz.de>
9
Reviewed-by: John Snow <jsnow@redhat.com>
10
Message-id: 20220305105743.2384766-2-peter.maydell@linaro.org
11
---
12
scripts/nsis.py | 4 ++--
13
1 file changed, 2 insertions(+), 2 deletions(-)
6
14
7
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
15
diff --git a/scripts/nsis.py b/scripts/nsis.py
8
Message-id: 20201107193403.436146-6-f4bug@amsat.org
9
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
11
---
12
hw/arm/musicpal.c | 25 +++++++++++++------------
13
1 file changed, 13 insertions(+), 12 deletions(-)
14
15
diff --git a/hw/arm/musicpal.c b/hw/arm/musicpal.c
16
index XXXXXXX..XXXXXXX 100644
16
index XXXXXXX..XXXXXXX 100644
17
--- a/hw/arm/musicpal.c
17
--- a/scripts/nsis.py
18
+++ b/hw/arm/musicpal.c
18
+++ b/scripts/nsis.py
19
@@ -XXX,XX +XXX,XX @@ static struct arm_boot_info musicpal_binfo = {
19
@@ -XXX,XX +XXX,XX @@ def main():
20
static void musicpal_init(MachineState *machine)
20
with open(
21
{
21
os.path.join(destdir + args.prefix, "system-emulations.nsh"), "w"
22
ARMCPU *cpu;
22
) as nsh:
23
- qemu_irq pic[32];
23
- for exe in glob.glob(
24
DeviceState *dev;
24
+ for exe in sorted(glob.glob(
25
+ DeviceState *pic;
25
os.path.join(destdir + args.prefix, "qemu-system-*.exe")
26
DeviceState *uart_orgate;
26
- ):
27
DeviceState *i2c_dev;
27
+ )):
28
DeviceState *lcd_dev;
28
exe = os.path.basename(exe)
29
@@ -XXX,XX +XXX,XX @@ static void musicpal_init(MachineState *machine)
29
arch = exe[12:-4]
30
&error_fatal);
30
nsh.write(
31
memory_region_add_subregion(address_space_mem, MP_SRAM_BASE, sram);
32
33
- dev = sysbus_create_simple(TYPE_MV88W8618_PIC, MP_PIC_BASE,
34
+ pic = sysbus_create_simple(TYPE_MV88W8618_PIC, MP_PIC_BASE,
35
qdev_get_gpio_in(DEVICE(cpu), ARM_CPU_IRQ));
36
- for (i = 0; i < 32; i++) {
37
- pic[i] = qdev_get_gpio_in(dev, i);
38
- }
39
- sysbus_create_varargs(TYPE_MV88W8618_PIT, MP_PIT_BASE, pic[MP_TIMER1_IRQ],
40
- pic[MP_TIMER2_IRQ], pic[MP_TIMER3_IRQ],
41
- pic[MP_TIMER4_IRQ], NULL);
42
+ sysbus_create_varargs(TYPE_MV88W8618_PIT, MP_PIT_BASE,
43
+ qdev_get_gpio_in(pic, MP_TIMER1_IRQ),
44
+ qdev_get_gpio_in(pic, MP_TIMER2_IRQ),
45
+ qdev_get_gpio_in(pic, MP_TIMER3_IRQ),
46
+ qdev_get_gpio_in(pic, MP_TIMER4_IRQ), NULL);
47
48
/* Logically OR both UART IRQs together */
49
uart_orgate = DEVICE(object_new(TYPE_OR_IRQ));
50
object_property_set_int(OBJECT(uart_orgate), "num-lines", 2, &error_fatal);
51
qdev_realize_and_unref(uart_orgate, NULL, &error_fatal);
52
- qdev_connect_gpio_out(DEVICE(uart_orgate), 0, pic[MP_UART_SHARED_IRQ]);
53
+ qdev_connect_gpio_out(DEVICE(uart_orgate), 0,
54
+ qdev_get_gpio_in(pic, MP_UART_SHARED_IRQ));
55
56
serial_mm_init(address_space_mem, MP_UART1_BASE, 2,
57
qdev_get_gpio_in(uart_orgate, 0),
58
@@ -XXX,XX +XXX,XX @@ static void musicpal_init(MachineState *machine)
59
OBJECT(get_system_memory()), &error_fatal);
60
sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
61
sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, MP_ETH_BASE);
62
- sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, pic[MP_ETH_IRQ]);
63
+ sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0,
64
+ qdev_get_gpio_in(pic, MP_ETH_IRQ));
65
66
sysbus_create_simple("mv88w8618_wlan", MP_WLAN_BASE, NULL);
67
68
sysbus_create_simple(TYPE_MUSICPAL_MISC, MP_MISC_BASE, NULL);
69
70
dev = sysbus_create_simple(TYPE_MUSICPAL_GPIO, MP_GPIO_BASE,
71
- pic[MP_GPIO_IRQ]);
72
+ qdev_get_gpio_in(pic, MP_GPIO_IRQ));
73
i2c_dev = sysbus_create_simple("gpio_i2c", -1, NULL);
74
i2c = (I2CBus *)qdev_get_child_bus(i2c_dev, "i2c");
75
76
@@ -XXX,XX +XXX,XX @@ static void musicpal_init(MachineState *machine)
77
NULL);
78
sysbus_realize_and_unref(s, &error_fatal);
79
sysbus_mmio_map(s, 0, MP_AUDIO_BASE);
80
- sysbus_connect_irq(s, 0, pic[MP_AUDIO_IRQ]);
81
+ sysbus_connect_irq(s, 0, qdev_get_gpio_in(pic, MP_AUDIO_IRQ));
82
83
musicpal_binfo.ram_size = MP_RAM_DEFAULT_SIZE;
84
arm_load_kernel(cpu, machine, &musicpal_binfo);
85
--
31
--
86
2.20.1
32
2.25.1
87
33
88
34
diff view generated by jsdifflib
New patch
1
When we build our Windows installer, it emits the warning:
1
2
3
warning 7998: ANSI targets are deprecated
4
5
Fix this by making our installer a Unicode installer instead. These
6
won't work on Win95/98/ME, but we already do not support those.
7
8
See
9
https://nsis.sourceforge.io/Docs/Chapter4.html#aunicodetarget
10
for the documentation of the Unicode directive.
11
12
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
13
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
14
Reviewed-by: Stefan Weil <sw@weilnetz.de>
15
Message-id: 20220305105743.2384766-3-peter.maydell@linaro.org
16
---
17
qemu.nsi | 3 +++
18
1 file changed, 3 insertions(+)
19
20
diff --git a/qemu.nsi b/qemu.nsi
21
index XXXXXXX..XXXXXXX 100644
22
--- a/qemu.nsi
23
+++ b/qemu.nsi
24
@@ -XXX,XX +XXX,XX @@
25
!define OUTFILE "qemu-setup.exe"
26
!endif
27
28
+; Build a unicode installer
29
+Unicode true
30
+
31
; Use maximum compression.
32
SetCompressor /SOLID lzma
33
34
--
35
2.25.1
36
37
diff view generated by jsdifflib
1
From: AlexChen <alex.chen@huawei.com>
1
We use the nsis.py script to write out an installer script Section
2
for each emulator executable, so the exact set of Sections depends on
3
which executables were built. However the part of qemu.nsi which
4
specifies mouse-over descriptions for each Section still has a
5
hard-coded and very outdated list (with just i386 and alpha). This
6
causes two problems. Firstly, if you build the installer for a
7
configuration where you didn't build the i386 binaries you get
8
warnings like this:
9
warning 6000: unknown variable/constant "{Section_i386}" detected, ignoring (macro:_==:1)
10
warning 6000: unknown variable/constant "{Section_i386w}" detected, ignoring (macro:_==:1)
11
(this happens in our gitlab CI jobs, for instance).
12
Secondly, most of the emulators in the generated installer don't have
13
any mouseover text.
2
14
3
We should use printf format specifier "%u" instead of "%d" for
15
Make nsis.py generate a second output file which has the necessary
4
argument of type "unsigned int".
16
MUI_DESCRIPTION_TEXT lines for each Section it creates, so we can
17
include that at the right point in qemu.nsi to set the mouse-over
18
text.
5
19
6
Reported-by: Euler Robot <euler.robot@huawei.com>
7
Signed-off-by: Alex Chen <alex.chen@huawei.com>
8
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
9
Message-id: 5FA280F5.8060902@huawei.com
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
20
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
21
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
22
Reviewed-by: John Snow <jsnow@redhat.com>
23
Message-id: 20220305105743.2384766-4-peter.maydell@linaro.org
11
---
24
---
12
hw/ssi/imx_spi.c | 2 +-
25
qemu.nsi | 5 +----
13
hw/ssi/xilinx_spi.c | 2 +-
26
scripts/nsis.py | 13 ++++++++++++-
14
2 files changed, 2 insertions(+), 2 deletions(-)
27
2 files changed, 13 insertions(+), 5 deletions(-)
15
28
16
diff --git a/hw/ssi/imx_spi.c b/hw/ssi/imx_spi.c
29
diff --git a/qemu.nsi b/qemu.nsi
17
index XXXXXXX..XXXXXXX 100644
30
index XXXXXXX..XXXXXXX 100644
18
--- a/hw/ssi/imx_spi.c
31
--- a/qemu.nsi
19
+++ b/hw/ssi/imx_spi.c
32
+++ b/qemu.nsi
20
@@ -XXX,XX +XXX,XX @@ static const char *imx_spi_reg_name(uint32_t reg)
33
@@ -XXX,XX +XXX,XX @@ SectionEnd
21
case ECSPI_MSGDATA:
34
; Descriptions (mouse-over).
22
return "ECSPI_MSGDATA";
35
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
23
default:
36
!insertmacro MUI_DESCRIPTION_TEXT ${SectionSystem} "System emulation."
24
- sprintf(unknown, "%d ?", reg);
37
- !insertmacro MUI_DESCRIPTION_TEXT ${Section_alpha} "Alpha system emulation."
25
+ sprintf(unknown, "%u ?", reg);
38
- !insertmacro MUI_DESCRIPTION_TEXT ${Section_alphaw} "Alpha system emulation (GUI)."
26
return unknown;
39
- !insertmacro MUI_DESCRIPTION_TEXT ${Section_i386} "PC i386 system emulation."
27
}
40
- !insertmacro MUI_DESCRIPTION_TEXT ${Section_i386w} "PC i386 system emulation (GUI)."
28
}
41
+!include "${BINDIR}\system-mui-text.nsh"
29
diff --git a/hw/ssi/xilinx_spi.c b/hw/ssi/xilinx_spi.c
42
!insertmacro MUI_DESCRIPTION_TEXT ${SectionTools} "Tools."
43
!ifdef DLLDIR
44
!insertmacro MUI_DESCRIPTION_TEXT ${SectionDll} "Runtime Libraries (DLL)."
45
diff --git a/scripts/nsis.py b/scripts/nsis.py
30
index XXXXXXX..XXXXXXX 100644
46
index XXXXXXX..XXXXXXX 100644
31
--- a/hw/ssi/xilinx_spi.c
47
--- a/scripts/nsis.py
32
+++ b/hw/ssi/xilinx_spi.c
48
+++ b/scripts/nsis.py
33
@@ -XXX,XX +XXX,XX @@ static void xlx_spi_update_irq(XilinxSPI *s)
49
@@ -XXX,XX +XXX,XX @@ def main():
34
irq chain unless things really changed. */
50
subprocess.run(["make", "install", "DESTDIR=" + destdir + os.path.sep])
35
if (pending != s->irqline) {
51
with open(
36
s->irqline = pending;
52
os.path.join(destdir + args.prefix, "system-emulations.nsh"), "w"
37
- DB_PRINT("irq_change of state %d ISR:%x IER:%X\n",
53
- ) as nsh:
38
+ DB_PRINT("irq_change of state %u ISR:%x IER:%X\n",
54
+ ) as nsh, open(
39
pending, s->regs[R_IPISR], s->regs[R_IPIER]);
55
+ os.path.join(destdir + args.prefix, "system-mui-text.nsh"), "w"
40
qemu_set_irq(s->irq, pending);
56
+ ) as muinsh:
41
}
57
for exe in sorted(glob.glob(
58
os.path.join(destdir + args.prefix, "qemu-system-*.exe")
59
)):
60
@@ -XXX,XX +XXX,XX @@ def main():
61
arch, exe
62
)
63
)
64
+ if arch.endswith('w'):
65
+ desc = arch[:-1] + " emulation (GUI)."
66
+ else:
67
+ desc = arch + " emulation."
68
+
69
+ muinsh.write(
70
+ """
71
+ !insertmacro MUI_DESCRIPTION_TEXT ${{Section_{0}}} "{1}"
72
+ """.format(arch, desc))
73
74
for exe in glob.glob(os.path.join(destdir + args.prefix, "*.exe")):
75
signcode(exe)
42
--
76
--
43
2.20.1
77
2.25.1
44
78
45
79
diff view generated by jsdifflib
1
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
1
From: Eric Auger <eric.auger@redhat.com>
2
2
3
The MusicPal board code connects both of the IRQ outputs of the UART
3
CONFIG_ARM_GIC_TCG actually guards the compilation of TCG GICv3
4
to the same INTC qemu_irq. Connecting two qemu_irqs outputs directly
4
specific files. So let's rename it into CONFIG_ARM_GICV3_TCG
5
to the same input is not valid as it produces subtly wrong behaviour
6
(for instance if both the IRQ lines are high, and then one goes
7
low, the INTC input will see this as a high-to-low transition
8
even though the second IRQ line should still be holding it high).
9
5
10
This kind of wiring needs an explicitly created OR gate; add one.
6
Signed-off-by: Eric Auger <eric.auger@redhat.com>
11
7
Reviewed-by: Andrew Jones <drjones@redhat.com>
12
Inspired-by: Peter Maydell <peter.maydell@linaro.org>
8
Message-id: 20220308182452.223473-2-eric.auger@redhat.com
13
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
14
Message-id: 20201107193403.436146-5-f4bug@amsat.org
15
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
9
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
16
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
17
---
11
---
18
hw/arm/musicpal.c | 17 +++++++++++++----
12
hw/intc/Kconfig | 2 +-
19
hw/arm/Kconfig | 1 +
13
hw/intc/meson.build | 4 ++--
20
2 files changed, 14 insertions(+), 4 deletions(-)
14
2 files changed, 3 insertions(+), 3 deletions(-)
21
15
22
diff --git a/hw/arm/musicpal.c b/hw/arm/musicpal.c
16
diff --git a/hw/intc/Kconfig b/hw/intc/Kconfig
23
index XXXXXXX..XXXXXXX 100644
17
index XXXXXXX..XXXXXXX 100644
24
--- a/hw/arm/musicpal.c
18
--- a/hw/intc/Kconfig
25
+++ b/hw/arm/musicpal.c
19
+++ b/hw/intc/Kconfig
26
@@ -XXX,XX +XXX,XX @@
20
@@ -XXX,XX +XXX,XX @@ config APIC
27
#include "ui/console.h"
21
select MSI_NONBROKEN
28
#include "hw/i2c/i2c.h"
22
select I8259
29
#include "hw/irq.h"
23
30
+#include "hw/or-irq.h"
24
-config ARM_GIC_TCG
31
#include "hw/audio/wm8750.h"
25
+config ARM_GICV3_TCG
32
#include "sysemu/block-backend.h"
26
bool
33
#include "sysemu/runstate.h"
27
default y
34
@@ -XXX,XX +XXX,XX @@
28
depends on ARM_GIC && TCG
35
#define MP_TIMER4_IRQ 7
29
diff --git a/hw/intc/meson.build b/hw/intc/meson.build
36
#define MP_EHCI_IRQ 8
37
#define MP_ETH_IRQ 9
38
-#define MP_UART1_IRQ 11
39
-#define MP_UART2_IRQ 11
40
+#define MP_UART_SHARED_IRQ 11
41
#define MP_GPIO_IRQ 12
42
#define MP_RTC_IRQ 28
43
#define MP_AUDIO_IRQ 30
44
@@ -XXX,XX +XXX,XX @@ static void musicpal_init(MachineState *machine)
45
ARMCPU *cpu;
46
qemu_irq pic[32];
47
DeviceState *dev;
48
+ DeviceState *uart_orgate;
49
DeviceState *i2c_dev;
50
DeviceState *lcd_dev;
51
DeviceState *key_dev;
52
@@ -XXX,XX +XXX,XX @@ static void musicpal_init(MachineState *machine)
53
pic[MP_TIMER2_IRQ], pic[MP_TIMER3_IRQ],
54
pic[MP_TIMER4_IRQ], NULL);
55
56
- serial_mm_init(address_space_mem, MP_UART1_BASE, 2, pic[MP_UART1_IRQ],
57
+ /* Logically OR both UART IRQs together */
58
+ uart_orgate = DEVICE(object_new(TYPE_OR_IRQ));
59
+ object_property_set_int(OBJECT(uart_orgate), "num-lines", 2, &error_fatal);
60
+ qdev_realize_and_unref(uart_orgate, NULL, &error_fatal);
61
+ qdev_connect_gpio_out(DEVICE(uart_orgate), 0, pic[MP_UART_SHARED_IRQ]);
62
+
63
+ serial_mm_init(address_space_mem, MP_UART1_BASE, 2,
64
+ qdev_get_gpio_in(uart_orgate, 0),
65
1825000, serial_hd(0), DEVICE_NATIVE_ENDIAN);
66
- serial_mm_init(address_space_mem, MP_UART2_BASE, 2, pic[MP_UART2_IRQ],
67
+ serial_mm_init(address_space_mem, MP_UART2_BASE, 2,
68
+ qdev_get_gpio_in(uart_orgate, 1),
69
1825000, serial_hd(1), DEVICE_NATIVE_ENDIAN);
70
71
/* Register flash */
72
diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig
73
index XXXXXXX..XXXXXXX 100644
30
index XXXXXXX..XXXXXXX 100644
74
--- a/hw/arm/Kconfig
31
--- a/hw/intc/meson.build
75
+++ b/hw/arm/Kconfig
32
+++ b/hw/intc/meson.build
76
@@ -XXX,XX +XXX,XX @@ config MUSCA
33
@@ -XXX,XX +XXX,XX @@ softmmu_ss.add(when: 'CONFIG_ARM_GIC', if_true: files(
77
34
'arm_gicv3_common.c',
78
config MUSICPAL
35
'arm_gicv3_its_common.c',
79
bool
36
))
80
+ select OR_IRQ
37
-softmmu_ss.add(when: 'CONFIG_ARM_GIC_TCG', if_true: files(
81
select BITBANG_I2C
38
+softmmu_ss.add(when: 'CONFIG_ARM_GICV3_TCG', if_true: files(
82
select MARVELL_88W8618
39
'arm_gicv3.c',
83
select PTIMER
40
'arm_gicv3_dist.c',
41
'arm_gicv3_its.c',
42
@@ -XXX,XX +XXX,XX @@ softmmu_ss.add(when: 'CONFIG_XLNX_ZYNQMP_PMU', if_true: files('xlnx-pmu-iomod-in
43
specific_ss.add(when: 'CONFIG_ALLWINNER_A10_PIC', if_true: files('allwinner-a10-pic.c'))
44
specific_ss.add(when: 'CONFIG_APIC', if_true: files('apic.c', 'apic_common.c'))
45
specific_ss.add(when: 'CONFIG_ARM_GIC', if_true: files('arm_gicv3_cpuif_common.c'))
46
-specific_ss.add(when: 'CONFIG_ARM_GIC_TCG', if_true: files('arm_gicv3_cpuif.c'))
47
+specific_ss.add(when: 'CONFIG_ARM_GICV3_TCG', if_true: files('arm_gicv3_cpuif.c'))
48
specific_ss.add(when: 'CONFIG_ARM_GIC_KVM', if_true: files('arm_gic_kvm.c'))
49
specific_ss.add(when: ['CONFIG_ARM_GIC_KVM', 'TARGET_AARCH64'], if_true: files('arm_gicv3_kvm.c', 'arm_gicv3_its_kvm.c'))
50
specific_ss.add(when: 'CONFIG_ARM_V7M', if_true: files('armv7m_nvic.c'))
84
--
51
--
85
2.20.1
52
2.25.1
86
87
diff view generated by jsdifflib
1
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
1
From: Eric Auger <eric.auger@redhat.com>
2
2
3
The system configuration controller (SYSCFG) doesn't have
3
In TCG mode, if gic-version=max we always select GICv3 even if
4
any output IRQ (and the INTC input #71 belongs to the UART6).
4
CONFIG_ARM_GICV3_TCG is unset. We shall rather select GICv2.
5
Remove the invalid code.
5
This also brings the benefit of fixing qos tests errors for tests
6
using gic-version=max with CONFIG_ARM_GICV3_TCG unset.
6
7
7
Fixes: db635521a02 ("stm32f205: Add the stm32f205 SoC")
8
Signed-off-by: Eric Auger <eric.auger@redhat.com>
8
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
9
Reviewed-by: Andrew Jones <drjones@redhat.com>
9
Message-id: 20201107193403.436146-3-f4bug@amsat.org
10
Message-id: 20220308182452.223473-3-eric.auger@redhat.com
10
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
11
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
11
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
12
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
12
---
13
---
13
include/hw/misc/stm32f2xx_syscfg.h | 2 --
14
hw/arm/virt.c | 7 ++++++-
14
hw/arm/stm32f205_soc.c | 1 -
15
1 file changed, 6 insertions(+), 1 deletion(-)
15
hw/misc/stm32f2xx_syscfg.c | 2 --
16
3 files changed, 5 deletions(-)
17
16
18
diff --git a/include/hw/misc/stm32f2xx_syscfg.h b/include/hw/misc/stm32f2xx_syscfg.h
17
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
19
index XXXXXXX..XXXXXXX 100644
18
index XXXXXXX..XXXXXXX 100644
20
--- a/include/hw/misc/stm32f2xx_syscfg.h
19
--- a/hw/arm/virt.c
21
+++ b/include/hw/misc/stm32f2xx_syscfg.h
20
+++ b/hw/arm/virt.c
22
@@ -XXX,XX +XXX,XX @@ struct STM32F2XXSyscfgState {
21
@@ -XXX,XX +XXX,XX @@ static void finalize_gic_version(VirtMachineState *vms)
23
uint32_t syscfg_exticr3;
22
vms->gic_version = VIRT_GIC_VERSION_2;
24
uint32_t syscfg_exticr4;
23
break;
25
uint32_t syscfg_cmpcr;
24
case VIRT_GIC_VERSION_MAX:
26
-
25
- vms->gic_version = VIRT_GIC_VERSION_3;
27
- qemu_irq irq;
26
+ if (module_object_class_by_name("arm-gicv3")) {
28
};
27
+ /* CONFIG_ARM_GICV3_TCG was set */
29
28
+ vms->gic_version = VIRT_GIC_VERSION_3;
30
#endif /* HW_STM32F2XX_SYSCFG_H */
29
+ } else {
31
diff --git a/hw/arm/stm32f205_soc.c b/hw/arm/stm32f205_soc.c
30
+ vms->gic_version = VIRT_GIC_VERSION_2;
32
index XXXXXXX..XXXXXXX 100644
31
+ }
33
--- a/hw/arm/stm32f205_soc.c
32
break;
34
+++ b/hw/arm/stm32f205_soc.c
33
case VIRT_GIC_VERSION_HOST:
35
@@ -XXX,XX +XXX,XX @@ static void stm32f205_soc_realize(DeviceState *dev_soc, Error **errp)
34
error_report("gic-version=host requires KVM");
36
}
37
busdev = SYS_BUS_DEVICE(dev);
38
sysbus_mmio_map(busdev, 0, 0x40013800);
39
- sysbus_connect_irq(busdev, 0, qdev_get_gpio_in(armv7m, 71));
40
41
/* Attach UART (uses USART registers) and USART controllers */
42
for (i = 0; i < STM_NUM_USARTS; i++) {
43
diff --git a/hw/misc/stm32f2xx_syscfg.c b/hw/misc/stm32f2xx_syscfg.c
44
index XXXXXXX..XXXXXXX 100644
45
--- a/hw/misc/stm32f2xx_syscfg.c
46
+++ b/hw/misc/stm32f2xx_syscfg.c
47
@@ -XXX,XX +XXX,XX @@ static void stm32f2xx_syscfg_init(Object *obj)
48
{
49
STM32F2XXSyscfgState *s = STM32F2XX_SYSCFG(obj);
50
51
- sysbus_init_irq(SYS_BUS_DEVICE(obj), &s->irq);
52
-
53
memory_region_init_io(&s->mmio, obj, &stm32f2xx_syscfg_ops, s,
54
TYPE_STM32F2XX_SYSCFG, 0x400);
55
sysbus_init_mmio(SYS_BUS_DEVICE(obj), &s->mmio);
56
--
35
--
57
2.20.1
36
2.25.1
58
59
diff view generated by jsdifflib
1
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
1
Currently the CPU_LOG_INT logging misses some useful information
2
about loads from the vector table. Add logging where we load vector
3
table entries. This is particularly helpful for cases where the user
4
has accidentally not put a vector table in their image at all, which
5
can result in confusing guest crashes at startup.
2
6
3
We can use one MPC per SRAM bank, but we currently only wire the
7
Here's an example of the new logging for a case where
4
IRQ from the first expansion MPC to the IRQ splitter. Fix that.
8
the vector table contains garbage:
5
9
6
Fixes: bb75e16d5e6 ("hw/arm/iotkit: Wire up MPC interrupt lines")
10
Loaded reset SP 0x0 PC 0x0 from vector table
7
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
11
Loaded reset SP 0xd008f8df PC 0xf000bf00 from vector table
8
Message-id: 20201107193403.436146-2-f4bug@amsat.org
12
Taking exception 3 [Prefetch Abort] on CPU 0
9
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
13
...with CFSR.IACCVIOL
14
...BusFault with BFSR.STKERR
15
...taking pending nonsecure exception 3
16
...loading from element 3 of non-secure vector table at 0xc
17
...loaded new PC 0x20000558
18
----------------
19
IN:
20
0x20000558: 08000079 stmdaeq r0, {r0, r3, r4, r5, r6}
21
22
(The double reset logging is the result of our long-standing
23
"CPUs all get reset twice" weirdness; it looks a bit ugly
24
but it'll go away if we ever fix that :-))
25
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
26
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
27
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
28
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
29
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
30
Message-id: 20220315204306.2797684-2-peter.maydell@linaro.org
11
---
31
---
12
hw/arm/armsse.c | 3 ++-
32
target/arm/cpu.c | 5 +++++
13
1 file changed, 2 insertions(+), 1 deletion(-)
33
target/arm/m_helper.c | 5 +++++
34
2 files changed, 10 insertions(+)
14
35
15
diff --git a/hw/arm/armsse.c b/hw/arm/armsse.c
36
diff --git a/target/arm/cpu.c b/target/arm/cpu.c
16
index XXXXXXX..XXXXXXX 100644
37
index XXXXXXX..XXXXXXX 100644
17
--- a/hw/arm/armsse.c
38
--- a/target/arm/cpu.c
18
+++ b/hw/arm/armsse.c
39
+++ b/target/arm/cpu.c
19
@@ -XXX,XX +XXX,XX @@ static void armsse_realize(DeviceState *dev, Error **errp)
40
@@ -XXX,XX +XXX,XX @@
20
qdev_get_gpio_in(dev_splitter, 0));
41
#include "qemu/osdep.h"
21
qdev_connect_gpio_out(dev_splitter, 0,
42
#include "qemu/qemu-print.h"
22
qdev_get_gpio_in_named(dev_secctl,
43
#include "qemu/timer.h"
23
- "mpc_status", 0));
44
+#include "qemu/log.h"
24
+ "mpc_status",
45
#include "qemu-common.h"
25
+ i - IOTS_NUM_EXP_MPC));
46
#include "target/arm/idau.h"
47
#include "qemu/module.h"
48
@@ -XXX,XX +XXX,XX @@ static void arm_cpu_reset(DeviceState *dev)
49
initial_pc = ldl_phys(s->as, vecbase + 4);
26
}
50
}
27
51
28
qdev_connect_gpio_out(dev_splitter, 1,
52
+ qemu_log_mask(CPU_LOG_INT,
53
+ "Loaded reset SP 0x%x PC 0x%x from vector table\n",
54
+ initial_msp, initial_pc);
55
+
56
env->regs[13] = initial_msp & 0xFFFFFFFC;
57
env->regs[15] = initial_pc & ~1;
58
env->thumb = initial_pc & 1;
59
diff --git a/target/arm/m_helper.c b/target/arm/m_helper.c
60
index XXXXXXX..XXXXXXX 100644
61
--- a/target/arm/m_helper.c
62
+++ b/target/arm/m_helper.c
63
@@ -XXX,XX +XXX,XX @@ static bool arm_v7m_load_vector(ARMCPU *cpu, int exc, bool targets_secure,
64
ARMMMUIdx mmu_idx;
65
bool exc_secure;
66
67
+ qemu_log_mask(CPU_LOG_INT,
68
+ "...loading from element %d of %s vector table at 0x%x\n",
69
+ exc, targets_secure ? "secure" : "non-secure", addr);
70
+
71
mmu_idx = arm_v7m_mmu_idx_for_secstate_and_priv(env, targets_secure, true);
72
73
/*
74
@@ -XXX,XX +XXX,XX @@ static bool arm_v7m_load_vector(ARMCPU *cpu, int exc, bool targets_secure,
75
goto load_fail;
76
}
77
*pvec = vector_entry;
78
+ qemu_log_mask(CPU_LOG_INT, "...loaded new PC 0x%x\n", *pvec);
79
return true;
80
81
load_fail:
29
--
82
--
30
2.20.1
83
2.25.1
31
84
32
85
diff view generated by jsdifflib
1
The nseries machines have a codepath that allows them to load a
1
For M-profile, the fault address is not always exposed to the guest
2
secondary bootloader. This code wasn't checking that the
2
in a fault register (for instance the BFAR bus fault address register
3
load_image_targphys() succeeded. Check the return value and report
3
is only updated for bus faults on data accesses, not instruction
4
the error to the user.
4
accesses). Currently we log the address only if we're putting it
5
into a particular guest-visible register. Since we always have it,
6
log it generically, to make logs of i-side faults a bit clearer.
5
7
6
While we're in the vicinity, fix the comment style of the
7
comment documenting what this image load is doing.
8
9
Fixes: Coverity CID 1192904
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
8
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
11
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
9
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
12
Message-id: 20201103114918.11807-1-peter.maydell@linaro.org
10
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
11
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
12
Message-id: 20220315204306.2797684-3-peter.maydell@linaro.org
13
---
13
---
14
hw/arm/nseries.c | 15 +++++++++++----
14
target/arm/m_helper.c | 6 ++++++
15
1 file changed, 11 insertions(+), 4 deletions(-)
15
1 file changed, 6 insertions(+)
16
16
17
diff --git a/hw/arm/nseries.c b/hw/arm/nseries.c
17
diff --git a/target/arm/m_helper.c b/target/arm/m_helper.c
18
index XXXXXXX..XXXXXXX 100644
18
index XXXXXXX..XXXXXXX 100644
19
--- a/hw/arm/nseries.c
19
--- a/target/arm/m_helper.c
20
+++ b/hw/arm/nseries.c
20
+++ b/target/arm/m_helper.c
21
@@ -XXX,XX +XXX,XX @@ static void n8x0_init(MachineState *machine,
21
@@ -XXX,XX +XXX,XX @@ void arm_v7m_cpu_do_interrupt(CPUState *cs)
22
/* No, wait, better start at the ROM. */
22
* Note that for M profile we don't have a guest facing FSR, but
23
s->mpu->cpu->env.regs[15] = OMAP2_Q2_BASE + 0x400000;
23
* the env->exception.fsr will be populated by the code that
24
24
* raises the fault, in the A profile short-descriptor format.
25
- /* This is intended for loading the `secondary.bin' program from
25
+ *
26
+ /*
26
+ * Log the exception.vaddress now regardless of subtype, because
27
+ * This is intended for loading the `secondary.bin' program from
27
+ * logging below only logs it when it goes into a guest visible
28
* Nokia images (the NOLO bootloader). The entry point seems
28
+ * register.
29
* to be at OMAP2_Q2_BASE + 0x400000.
29
*/
30
*
30
+ qemu_log_mask(CPU_LOG_INT, "...at fault address 0x%x\n",
31
@@ -XXX,XX +XXX,XX @@ static void n8x0_init(MachineState *machine,
31
+ (uint32_t)env->exception.vaddress);
32
* for them the entry point needs to be set to OMAP2_SRAM_BASE.
32
switch (env->exception.fsr & 0xf) {
33
*
33
case M_FAKE_FSR_NSC_EXEC:
34
* The code above is for loading the `zImage' file from Nokia
34
/*
35
- * images. */
36
- load_image_targphys(option_rom[0].name, OMAP2_Q2_BASE + 0x400000,
37
- machine->ram_size - 0x400000);
38
+ * images.
39
+ */
40
+ if (load_image_targphys(option_rom[0].name,
41
+ OMAP2_Q2_BASE + 0x400000,
42
+ machine->ram_size - 0x400000) < 0) {
43
+ error_report("Failed to load secondary bootloader %s",
44
+ option_rom[0].name);
45
+ exit(EXIT_FAILURE);
46
+ }
47
48
n800_setup_nolo_tags(nolo_tags);
49
cpu_physical_memory_write(OMAP2_SRAM_BASE, nolo_tags, 0x10000);
50
--
35
--
51
2.20.1
36
2.25.1
52
37
53
38
diff view generated by jsdifflib
1
From: Havard Skinnemoen <hskinnemoen@google.com>
1
From: "Edgar E. Iglesias" <edgar.iglesias@xilinx.com>
2
2
3
The number of runs is equal to the number of 0-1 and 1-0 transitions,
3
Add an unimplemented SERDES (Serializer/Deserializer) area.
4
plus one. Currently, it's counting the number of times these transitions
5
do _not_ happen, plus one.
6
4
7
Source:
5
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
8
https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-22r1a.pdf
6
Reviewed-by: Francisco Iglesias <francisco.iglesias@xilinx.com>
9
section 2.3.4 point (3).
7
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
10
8
Message-id: 20220316164645.2303510-2-edgar.iglesias@gmail.com
11
Signed-off-by: Havard Skinnemoen <hskinnemoen@google.com>
12
Message-id: 20201103011457.2959989-2-hskinnemoen@google.com
13
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
14
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
9
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
15
---
10
---
16
tests/qtest/npcm7xx_rng-test.c | 2 +-
11
include/hw/arm/xlnx-zynqmp.h | 2 +-
17
1 file changed, 1 insertion(+), 1 deletion(-)
12
hw/arm/xlnx-zynqmp.c | 5 +++++
13
2 files changed, 6 insertions(+), 1 deletion(-)
18
14
19
diff --git a/tests/qtest/npcm7xx_rng-test.c b/tests/qtest/npcm7xx_rng-test.c
15
diff --git a/include/hw/arm/xlnx-zynqmp.h b/include/hw/arm/xlnx-zynqmp.h
20
index XXXXXXX..XXXXXXX 100644
16
index XXXXXXX..XXXXXXX 100644
21
--- a/tests/qtest/npcm7xx_rng-test.c
17
--- a/include/hw/arm/xlnx-zynqmp.h
22
+++ b/tests/qtest/npcm7xx_rng-test.c
18
+++ b/include/hw/arm/xlnx-zynqmp.h
23
@@ -XXX,XX +XXX,XX @@ static double calc_runs_p(const unsigned long *buf, unsigned int nr_bits)
19
@@ -XXX,XX +XXX,XX @@ OBJECT_DECLARE_SIMPLE_TYPE(XlnxZynqMPState, XLNX_ZYNQMP)
24
pi = (double)nr_ones / nr_bits;
20
/*
25
21
* Unimplemented mmio regions needed to boot some images.
26
for (k = 0; k < nr_bits - 1; k++) {
22
*/
27
- vn_obs += !(test_bit(k, buf) ^ test_bit(k + 1, buf));
23
-#define XLNX_ZYNQMP_NUM_UNIMP_AREAS 1
28
+ vn_obs += (test_bit(k, buf) ^ test_bit(k + 1, buf));
24
+#define XLNX_ZYNQMP_NUM_UNIMP_AREAS 2
29
}
25
30
vn_obs += 1;
26
struct XlnxZynqMPState {
27
/*< private >*/
28
diff --git a/hw/arm/xlnx-zynqmp.c b/hw/arm/xlnx-zynqmp.c
29
index XXXXXXX..XXXXXXX 100644
30
--- a/hw/arm/xlnx-zynqmp.c
31
+++ b/hw/arm/xlnx-zynqmp.c
32
@@ -XXX,XX +XXX,XX @@
33
#define QSPI_DMA_ADDR 0xff0f0800
34
#define NUM_QSPI_IRQ_LINES 2
35
36
+/* Serializer/Deserializer. */
37
+#define SERDES_ADDR 0xfd400000
38
+#define SERDES_SIZE 0x20000
39
+
40
#define DP_ADDR 0xfd4a0000
41
#define DP_IRQ 113
42
43
@@ -XXX,XX +XXX,XX @@ static void xlnx_zynqmp_create_unimp_mmio(XlnxZynqMPState *s)
44
hwaddr size;
45
} unimp_areas[ARRAY_SIZE(s->mr_unimp)] = {
46
{ .name = "apu", APU_ADDR, APU_SIZE },
47
+ { .name = "serdes", SERDES_ADDR, SERDES_SIZE },
48
};
49
unsigned int nr;
31
50
32
--
51
--
33
2.20.1
52
2.25.1
34
53
35
54
diff view generated by jsdifflib
1
From: Xinhao Zhang <zhangxinhao1@huawei.com>
1
From: "Edgar E. Iglesias" <edgar.iglesias@xilinx.com>
2
2
3
Fix code style. Operator needs spaces both sides.
3
Make the rvbar property settable after realize. This is done
4
in preparation to model the ZynqMP's runtime configurable rvbar.
4
5
5
Signed-off-by: Xinhao Zhang <zhangxinhao1@huawei.com>
6
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
6
Signed-off-by: Kai Deng <dengkai1@huawei.com>
7
Message-id: 20220316164645.2303510-3-edgar.iglesias@gmail.com
7
Message-id: 20201103114529.638233-1-zhangxinhao1@huawei.com
8
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
8
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
9
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
9
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
10
---
10
---
11
target/arm/arch_dump.c | 8 ++++----
11
target/arm/cpu.h | 3 ++-
12
target/arm/arm-semi.c | 8 ++++----
12
target/arm/cpu.c | 12 +++++++-----
13
target/arm/helper.c | 2 +-
13
target/arm/helper.c | 10 +++++++---
14
3 files changed, 9 insertions(+), 9 deletions(-)
14
3 files changed, 16 insertions(+), 9 deletions(-)
15
15
16
diff --git a/target/arm/arch_dump.c b/target/arm/arch_dump.c
16
diff --git a/target/arm/cpu.h b/target/arm/cpu.h
17
index XXXXXXX..XXXXXXX 100644
17
index XXXXXXX..XXXXXXX 100644
18
--- a/target/arm/arch_dump.c
18
--- a/target/arm/cpu.h
19
+++ b/target/arm/arch_dump.c
19
+++ b/target/arm/cpu.h
20
@@ -XXX,XX +XXX,XX @@ static int aarch64_write_elf64_prfpreg(WriteCoreDumpFunction f,
20
@@ -XXX,XX +XXX,XX @@ typedef struct CPUArchState {
21
21
uint64_t vbar_el[4];
22
for (i = 0; i < 32; ++i) {
22
};
23
uint64_t *q = aa64_vfp_qreg(env, i);
23
uint32_t mvbar; /* (monitor) vector base address register */
24
- note.vfp.vregs[2*i + 0] = cpu_to_dump64(s, q[0]);
24
+ uint64_t rvbar; /* rvbar sampled from rvbar property at reset */
25
- note.vfp.vregs[2*i + 1] = cpu_to_dump64(s, q[1]);
25
struct { /* FCSE PID. */
26
+ note.vfp.vregs[2 * i + 0] = cpu_to_dump64(s, q[0]);
26
uint32_t fcseidr_ns;
27
+ note.vfp.vregs[2 * i + 1] = cpu_to_dump64(s, q[1]);
27
uint32_t fcseidr_s;
28
@@ -XXX,XX +XXX,XX @@ struct ArchCPU {
29
30
/* DCZ blocksize, in log_2(words), ie low 4 bits of DCZID_EL0 */
31
uint32_t dcz_blocksize;
32
- uint64_t rvbar;
33
+ uint64_t rvbar_prop; /* Property/input signals. */
34
35
/* Configurable aspects of GIC cpu interface (which is part of the CPU) */
36
int gic_num_lrs; /* number of list registers */
37
diff --git a/target/arm/cpu.c b/target/arm/cpu.c
38
index XXXXXXX..XXXXXXX 100644
39
--- a/target/arm/cpu.c
40
+++ b/target/arm/cpu.c
41
@@ -XXX,XX +XXX,XX @@ static void arm_cpu_reset(DeviceState *dev)
42
} else {
43
env->pstate = PSTATE_MODE_EL1h;
44
}
45
- env->pc = cpu->rvbar;
46
+
47
+ /* Sample rvbar at reset. */
48
+ env->cp15.rvbar = cpu->rvbar_prop;
49
+ env->pc = env->cp15.rvbar;
50
#endif
51
} else {
52
#if defined(CONFIG_USER_ONLY)
53
@@ -XXX,XX +XXX,XX @@ static Property arm_cpu_reset_cbar_property =
54
static Property arm_cpu_reset_hivecs_property =
55
DEFINE_PROP_BOOL("reset-hivecs", ARMCPU, reset_hivecs, false);
56
57
-static Property arm_cpu_rvbar_property =
58
- DEFINE_PROP_UINT64("rvbar", ARMCPU, rvbar, 0);
59
-
60
#ifndef CONFIG_USER_ONLY
61
static Property arm_cpu_has_el2_property =
62
DEFINE_PROP_BOOL("has_el2", ARMCPU, has_el2, true);
63
@@ -XXX,XX +XXX,XX @@ void arm_cpu_post_init(Object *obj)
28
}
64
}
29
65
30
if (s->dump_info.d_endian == ELFDATA2MSB) {
66
if (arm_feature(&cpu->env, ARM_FEATURE_AARCH64)) {
31
@@ -XXX,XX +XXX,XX @@ static int aarch64_write_elf64_prfpreg(WriteCoreDumpFunction f,
67
- qdev_property_add_static(DEVICE(obj), &arm_cpu_rvbar_property);
32
*/
68
+ object_property_add_uint64_ptr(obj, "rvbar",
33
for (i = 0; i < 32; ++i) {
69
+ &cpu->rvbar_prop,
34
uint64_t tmp = note.vfp.vregs[2*i];
70
+ OBJ_PROP_FLAG_READWRITE);
35
- note.vfp.vregs[2*i] = note.vfp.vregs[2*i+1];
36
- note.vfp.vregs[2*i+1] = tmp;
37
+ note.vfp.vregs[2 * i] = note.vfp.vregs[2 * i + 1];
38
+ note.vfp.vregs[2 * i + 1] = tmp;
39
}
40
}
71
}
41
72
42
diff --git a/target/arm/arm-semi.c b/target/arm/arm-semi.c
73
#ifndef CONFIG_USER_ONLY
43
index XXXXXXX..XXXXXXX 100644
44
--- a/target/arm/arm-semi.c
45
+++ b/target/arm/arm-semi.c
46
@@ -XXX,XX +XXX,XX @@ target_ulong do_arm_semihosting(CPUARMState *env)
47
if (use_gdb_syscalls()) {
48
arm_semi_open_guestfd = guestfd;
49
ret = arm_gdb_syscall(cpu, arm_semi_open_cb, "open,%s,%x,1a4", arg0,
50
- (int)arg2+1, gdb_open_modeflags[arg1]);
51
+ (int)arg2 + 1, gdb_open_modeflags[arg1]);
52
} else {
53
ret = set_swi_errno(env, open(s, open_modeflags[arg1], 0644));
54
if (ret == (uint32_t)-1) {
55
@@ -XXX,XX +XXX,XX @@ target_ulong do_arm_semihosting(CPUARMState *env)
56
GET_ARG(1);
57
if (use_gdb_syscalls()) {
58
ret = arm_gdb_syscall(cpu, arm_semi_cb, "unlink,%s",
59
- arg0, (int)arg1+1);
60
+ arg0, (int)arg1 + 1);
61
} else {
62
s = lock_user_string(arg0);
63
if (!s) {
64
@@ -XXX,XX +XXX,XX @@ target_ulong do_arm_semihosting(CPUARMState *env)
65
GET_ARG(3);
66
if (use_gdb_syscalls()) {
67
return arm_gdb_syscall(cpu, arm_semi_cb, "rename,%s,%s",
68
- arg0, (int)arg1+1, arg2, (int)arg3+1);
69
+ arg0, (int)arg1 + 1, arg2, (int)arg3 + 1);
70
} else {
71
char *s2;
72
s = lock_user_string(arg0);
73
@@ -XXX,XX +XXX,XX @@ target_ulong do_arm_semihosting(CPUARMState *env)
74
GET_ARG(1);
75
if (use_gdb_syscalls()) {
76
return arm_gdb_syscall(cpu, arm_semi_cb, "system,%s",
77
- arg0, (int)arg1+1);
78
+ arg0, (int)arg1 + 1);
79
} else {
80
s = lock_user_string(arg0);
81
if (!s) {
82
diff --git a/target/arm/helper.c b/target/arm/helper.c
74
diff --git a/target/arm/helper.c b/target/arm/helper.c
83
index XXXXXXX..XXXXXXX 100644
75
index XXXXXXX..XXXXXXX 100644
84
--- a/target/arm/helper.c
76
--- a/target/arm/helper.c
85
+++ b/target/arm/helper.c
77
+++ b/target/arm/helper.c
86
@@ -XXX,XX +XXX,XX @@ uint32_t HELPER(usad8)(uint32_t a, uint32_t b)
78
@@ -XXX,XX +XXX,XX @@ void register_cp_regs_for_features(ARMCPU *cpu)
87
uint32_t sum;
79
ARMCPRegInfo rvbar = {
88
sum = do_usad(a, b);
80
.name = "RVBAR_EL1", .state = ARM_CP_STATE_AA64,
89
sum += do_usad(a >> 8, b >> 8);
81
.opc0 = 3, .opc1 = 0, .crn = 12, .crm = 0, .opc2 = 1,
90
- sum += do_usad(a >> 16, b >>16);
82
- .type = ARM_CP_CONST, .access = PL1_R, .resetvalue = cpu->rvbar
91
+ sum += do_usad(a >> 16, b >> 16);
83
+ .access = PL1_R,
92
sum += do_usad(a >> 24, b >> 24);
84
+ .fieldoffset = offsetof(CPUARMState, cp15.rvbar),
93
return sum;
85
};
94
}
86
define_one_arm_cp_reg(cpu, &rvbar);
87
}
88
@@ -XXX,XX +XXX,XX @@ void register_cp_regs_for_features(ARMCPU *cpu)
89
ARMCPRegInfo rvbar = {
90
.name = "RVBAR_EL2", .state = ARM_CP_STATE_AA64,
91
.opc0 = 3, .opc1 = 4, .crn = 12, .crm = 0, .opc2 = 1,
92
- .type = ARM_CP_CONST, .access = PL2_R, .resetvalue = cpu->rvbar
93
+ .access = PL2_R,
94
+ .fieldoffset = offsetof(CPUARMState, cp15.rvbar),
95
};
96
define_one_arm_cp_reg(cpu, &rvbar);
97
}
98
@@ -XXX,XX +XXX,XX @@ void register_cp_regs_for_features(ARMCPU *cpu)
99
ARMCPRegInfo el3_regs[] = {
100
{ .name = "RVBAR_EL3", .state = ARM_CP_STATE_AA64,
101
.opc0 = 3, .opc1 = 6, .crn = 12, .crm = 0, .opc2 = 1,
102
- .type = ARM_CP_CONST, .access = PL3_R, .resetvalue = cpu->rvbar },
103
+ .access = PL3_R,
104
+ .fieldoffset = offsetof(CPUARMState, cp15.rvbar),
105
+ },
106
{ .name = "SCTLR_EL3", .state = ARM_CP_STATE_AA64,
107
.opc0 = 3, .opc1 = 6, .crn = 1, .crm = 0, .opc2 = 0,
108
.access = PL3_RW,
95
--
109
--
96
2.20.1
110
2.25.1
97
98
diff view generated by jsdifflib
1
From: Alex Bennée <alex.bennee@linaro.org>
1
From: "Edgar E. Iglesias" <edgar.iglesias@xilinx.com>
2
2
3
We should at least document what this machine is about.
3
Add a model of the Xilinx ZynqMP CRF. At the moment this
4
is mostly a stub model.
4
5
5
Reviewed-by: Graeme Gregory <graeme@nuviainc.com>
6
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
6
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
7
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
7
Message-id: 20201104165254.24822-1-alex.bennee@linaro.org
8
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
8
Cc: Leif Lindholm <leif@nuviainc.com>
9
Message-id: 20220316164645.2303510-4-edgar.iglesias@gmail.com
9
Cc: Shashi Mallela <shashi.mallela@linaro.org>
10
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
11
[PMM: fixed filename mismatch]
12
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
13
---
11
---
14
docs/system/arm/sbsa.rst | 32 ++++++++++++++++++++++++++++++++
12
include/hw/misc/xlnx-zynqmp-crf.h | 211 ++++++++++++++++++++++++
15
docs/system/target-arm.rst | 1 +
13
hw/misc/xlnx-zynqmp-crf.c | 266 ++++++++++++++++++++++++++++++
16
2 files changed, 33 insertions(+)
14
hw/misc/meson.build | 1 +
17
create mode 100644 docs/system/arm/sbsa.rst
15
3 files changed, 478 insertions(+)
16
create mode 100644 include/hw/misc/xlnx-zynqmp-crf.h
17
create mode 100644 hw/misc/xlnx-zynqmp-crf.c
18
18
19
diff --git a/docs/system/arm/sbsa.rst b/docs/system/arm/sbsa.rst
19
diff --git a/include/hw/misc/xlnx-zynqmp-crf.h b/include/hw/misc/xlnx-zynqmp-crf.h
20
new file mode 100644
20
new file mode 100644
21
index XXXXXXX..XXXXXXX
21
index XXXXXXX..XXXXXXX
22
--- /dev/null
22
--- /dev/null
23
+++ b/docs/system/arm/sbsa.rst
23
+++ b/include/hw/misc/xlnx-zynqmp-crf.h
24
@@ -XXX,XX +XXX,XX @@
24
@@ -XXX,XX +XXX,XX @@
25
+Arm Server Base System Architecture Reference board (``sbsa-ref``)
25
+/*
26
+==================================================================
26
+ * QEMU model of the CRF - Clock Reset FPD.
27
+
27
+ *
28
+While the `virt` board is a generic board platform that doesn't match
28
+ * Copyright (c) 2022 Xilinx Inc.
29
+any real hardware the `sbsa-ref` board intends to look like real
29
+ * SPDX-License-Identifier: GPL-2.0-or-later
30
+hardware. The `Server Base System Architecture
30
+ * Written by Edgar E. Iglesias <edgar.iglesias@xilinx.com>
31
+<https://developer.arm.com/documentation/den0029/latest>` defines a
31
+ */
32
+minimum base line of hardware support and importantly how the firmware
32
+#ifndef HW_MISC_XLNX_ZYNQMP_CRF_H
33
+reports that to any operating system. It is a static system that
33
+#define HW_MISC_XLNX_ZYNQMP_CRF_H
34
+reports a very minimal DT to the firmware for non-discoverable
34
+
35
+information about components affected by the qemu command line (i.e.
35
+#include "hw/sysbus.h"
36
+cpus and memory). As a result it must have a firmware specifically
36
+#include "hw/register.h"
37
+built to expect a certain hardware layout (as you would in a real
37
+
38
+machine).
38
+#define TYPE_XLNX_ZYNQMP_CRF "xlnx.zynqmp_crf"
39
+
39
+OBJECT_DECLARE_SIMPLE_TYPE(XlnxZynqMPCRF, XLNX_ZYNQMP_CRF)
40
+It is intended to be a machine for developing firmware and testing
40
+
41
+standards compliance with operating systems.
41
+REG32(ERR_CTRL, 0x0)
42
+
42
+ FIELD(ERR_CTRL, SLVERR_ENABLE, 0, 1)
43
+Supported devices
43
+REG32(IR_STATUS, 0x4)
44
+"""""""""""""""""
44
+ FIELD(IR_STATUS, ADDR_DECODE_ERR, 0, 1)
45
+
45
+REG32(IR_MASK, 0x8)
46
+The sbsa-ref board supports:
46
+ FIELD(IR_MASK, ADDR_DECODE_ERR, 0, 1)
47
+
47
+REG32(IR_ENABLE, 0xc)
48
+ - A configurable number of AArch64 CPUs
48
+ FIELD(IR_ENABLE, ADDR_DECODE_ERR, 0, 1)
49
+ - GIC version 3
49
+REG32(IR_DISABLE, 0x10)
50
+ - System bus AHCI controller
50
+ FIELD(IR_DISABLE, ADDR_DECODE_ERR, 0, 1)
51
+ - System bus EHCI controller
51
+REG32(CRF_WPROT, 0x1c)
52
+ - CDROM and hard disc on AHCI bus
52
+ FIELD(CRF_WPROT, ACTIVE, 0, 1)
53
+ - E1000E ethernet card on PCIe bus
53
+REG32(APLL_CTRL, 0x20)
54
+ - VGA display adaptor on PCIe bus
54
+ FIELD(APLL_CTRL, POST_SRC, 24, 3)
55
+ - A generic SBSA watchdog device
55
+ FIELD(APLL_CTRL, PRE_SRC, 20, 3)
56
+
56
+ FIELD(APLL_CTRL, CLKOUTDIV, 17, 1)
57
diff --git a/docs/system/target-arm.rst b/docs/system/target-arm.rst
57
+ FIELD(APLL_CTRL, DIV2, 16, 1)
58
+ FIELD(APLL_CTRL, FBDIV, 8, 7)
59
+ FIELD(APLL_CTRL, BYPASS, 3, 1)
60
+ FIELD(APLL_CTRL, RESET, 0, 1)
61
+REG32(APLL_CFG, 0x24)
62
+ FIELD(APLL_CFG, LOCK_DLY, 25, 7)
63
+ FIELD(APLL_CFG, LOCK_CNT, 13, 10)
64
+ FIELD(APLL_CFG, LFHF, 10, 2)
65
+ FIELD(APLL_CFG, CP, 5, 4)
66
+ FIELD(APLL_CFG, RES, 0, 4)
67
+REG32(APLL_FRAC_CFG, 0x28)
68
+ FIELD(APLL_FRAC_CFG, ENABLED, 31, 1)
69
+ FIELD(APLL_FRAC_CFG, SEED, 22, 3)
70
+ FIELD(APLL_FRAC_CFG, ALGRTHM, 19, 1)
71
+ FIELD(APLL_FRAC_CFG, ORDER, 18, 1)
72
+ FIELD(APLL_FRAC_CFG, DATA, 0, 16)
73
+REG32(DPLL_CTRL, 0x2c)
74
+ FIELD(DPLL_CTRL, POST_SRC, 24, 3)
75
+ FIELD(DPLL_CTRL, PRE_SRC, 20, 3)
76
+ FIELD(DPLL_CTRL, CLKOUTDIV, 17, 1)
77
+ FIELD(DPLL_CTRL, DIV2, 16, 1)
78
+ FIELD(DPLL_CTRL, FBDIV, 8, 7)
79
+ FIELD(DPLL_CTRL, BYPASS, 3, 1)
80
+ FIELD(DPLL_CTRL, RESET, 0, 1)
81
+REG32(DPLL_CFG, 0x30)
82
+ FIELD(DPLL_CFG, LOCK_DLY, 25, 7)
83
+ FIELD(DPLL_CFG, LOCK_CNT, 13, 10)
84
+ FIELD(DPLL_CFG, LFHF, 10, 2)
85
+ FIELD(DPLL_CFG, CP, 5, 4)
86
+ FIELD(DPLL_CFG, RES, 0, 4)
87
+REG32(DPLL_FRAC_CFG, 0x34)
88
+ FIELD(DPLL_FRAC_CFG, ENABLED, 31, 1)
89
+ FIELD(DPLL_FRAC_CFG, SEED, 22, 3)
90
+ FIELD(DPLL_FRAC_CFG, ALGRTHM, 19, 1)
91
+ FIELD(DPLL_FRAC_CFG, ORDER, 18, 1)
92
+ FIELD(DPLL_FRAC_CFG, DATA, 0, 16)
93
+REG32(VPLL_CTRL, 0x38)
94
+ FIELD(VPLL_CTRL, POST_SRC, 24, 3)
95
+ FIELD(VPLL_CTRL, PRE_SRC, 20, 3)
96
+ FIELD(VPLL_CTRL, CLKOUTDIV, 17, 1)
97
+ FIELD(VPLL_CTRL, DIV2, 16, 1)
98
+ FIELD(VPLL_CTRL, FBDIV, 8, 7)
99
+ FIELD(VPLL_CTRL, BYPASS, 3, 1)
100
+ FIELD(VPLL_CTRL, RESET, 0, 1)
101
+REG32(VPLL_CFG, 0x3c)
102
+ FIELD(VPLL_CFG, LOCK_DLY, 25, 7)
103
+ FIELD(VPLL_CFG, LOCK_CNT, 13, 10)
104
+ FIELD(VPLL_CFG, LFHF, 10, 2)
105
+ FIELD(VPLL_CFG, CP, 5, 4)
106
+ FIELD(VPLL_CFG, RES, 0, 4)
107
+REG32(VPLL_FRAC_CFG, 0x40)
108
+ FIELD(VPLL_FRAC_CFG, ENABLED, 31, 1)
109
+ FIELD(VPLL_FRAC_CFG, SEED, 22, 3)
110
+ FIELD(VPLL_FRAC_CFG, ALGRTHM, 19, 1)
111
+ FIELD(VPLL_FRAC_CFG, ORDER, 18, 1)
112
+ FIELD(VPLL_FRAC_CFG, DATA, 0, 16)
113
+REG32(PLL_STATUS, 0x44)
114
+ FIELD(PLL_STATUS, VPLL_STABLE, 5, 1)
115
+ FIELD(PLL_STATUS, DPLL_STABLE, 4, 1)
116
+ FIELD(PLL_STATUS, APLL_STABLE, 3, 1)
117
+ FIELD(PLL_STATUS, VPLL_LOCK, 2, 1)
118
+ FIELD(PLL_STATUS, DPLL_LOCK, 1, 1)
119
+ FIELD(PLL_STATUS, APLL_LOCK, 0, 1)
120
+REG32(APLL_TO_LPD_CTRL, 0x48)
121
+ FIELD(APLL_TO_LPD_CTRL, DIVISOR0, 8, 6)
122
+REG32(DPLL_TO_LPD_CTRL, 0x4c)
123
+ FIELD(DPLL_TO_LPD_CTRL, DIVISOR0, 8, 6)
124
+REG32(VPLL_TO_LPD_CTRL, 0x50)
125
+ FIELD(VPLL_TO_LPD_CTRL, DIVISOR0, 8, 6)
126
+REG32(ACPU_CTRL, 0x60)
127
+ FIELD(ACPU_CTRL, CLKACT_HALF, 25, 1)
128
+ FIELD(ACPU_CTRL, CLKACT_FULL, 24, 1)
129
+ FIELD(ACPU_CTRL, DIVISOR0, 8, 6)
130
+ FIELD(ACPU_CTRL, SRCSEL, 0, 3)
131
+REG32(DBG_TRACE_CTRL, 0x64)
132
+ FIELD(DBG_TRACE_CTRL, CLKACT, 24, 1)
133
+ FIELD(DBG_TRACE_CTRL, DIVISOR0, 8, 6)
134
+ FIELD(DBG_TRACE_CTRL, SRCSEL, 0, 3)
135
+REG32(DBG_FPD_CTRL, 0x68)
136
+ FIELD(DBG_FPD_CTRL, CLKACT, 24, 1)
137
+ FIELD(DBG_FPD_CTRL, DIVISOR0, 8, 6)
138
+ FIELD(DBG_FPD_CTRL, SRCSEL, 0, 3)
139
+REG32(DP_VIDEO_REF_CTRL, 0x70)
140
+ FIELD(DP_VIDEO_REF_CTRL, CLKACT, 24, 1)
141
+ FIELD(DP_VIDEO_REF_CTRL, DIVISOR1, 16, 6)
142
+ FIELD(DP_VIDEO_REF_CTRL, DIVISOR0, 8, 6)
143
+ FIELD(DP_VIDEO_REF_CTRL, SRCSEL, 0, 3)
144
+REG32(DP_AUDIO_REF_CTRL, 0x74)
145
+ FIELD(DP_AUDIO_REF_CTRL, CLKACT, 24, 1)
146
+ FIELD(DP_AUDIO_REF_CTRL, DIVISOR1, 16, 6)
147
+ FIELD(DP_AUDIO_REF_CTRL, DIVISOR0, 8, 6)
148
+ FIELD(DP_AUDIO_REF_CTRL, SRCSEL, 0, 3)
149
+REG32(DP_STC_REF_CTRL, 0x7c)
150
+ FIELD(DP_STC_REF_CTRL, CLKACT, 24, 1)
151
+ FIELD(DP_STC_REF_CTRL, DIVISOR1, 16, 6)
152
+ FIELD(DP_STC_REF_CTRL, DIVISOR0, 8, 6)
153
+ FIELD(DP_STC_REF_CTRL, SRCSEL, 0, 3)
154
+REG32(DDR_CTRL, 0x80)
155
+ FIELD(DDR_CTRL, CLKACT, 24, 1)
156
+ FIELD(DDR_CTRL, DIVISOR0, 8, 6)
157
+ FIELD(DDR_CTRL, SRCSEL, 0, 3)
158
+REG32(GPU_REF_CTRL, 0x84)
159
+ FIELD(GPU_REF_CTRL, PP1_CLKACT, 26, 1)
160
+ FIELD(GPU_REF_CTRL, PP0_CLKACT, 25, 1)
161
+ FIELD(GPU_REF_CTRL, CLKACT, 24, 1)
162
+ FIELD(GPU_REF_CTRL, DIVISOR0, 8, 6)
163
+ FIELD(GPU_REF_CTRL, SRCSEL, 0, 3)
164
+REG32(SATA_REF_CTRL, 0xa0)
165
+ FIELD(SATA_REF_CTRL, CLKACT, 24, 1)
166
+ FIELD(SATA_REF_CTRL, DIVISOR0, 8, 6)
167
+ FIELD(SATA_REF_CTRL, SRCSEL, 0, 3)
168
+REG32(PCIE_REF_CTRL, 0xb4)
169
+ FIELD(PCIE_REF_CTRL, CLKACT, 24, 1)
170
+ FIELD(PCIE_REF_CTRL, DIVISOR0, 8, 6)
171
+ FIELD(PCIE_REF_CTRL, SRCSEL, 0, 3)
172
+REG32(GDMA_REF_CTRL, 0xb8)
173
+ FIELD(GDMA_REF_CTRL, CLKACT, 24, 1)
174
+ FIELD(GDMA_REF_CTRL, DIVISOR0, 8, 6)
175
+ FIELD(GDMA_REF_CTRL, SRCSEL, 0, 3)
176
+REG32(DPDMA_REF_CTRL, 0xbc)
177
+ FIELD(DPDMA_REF_CTRL, CLKACT, 24, 1)
178
+ FIELD(DPDMA_REF_CTRL, DIVISOR0, 8, 6)
179
+ FIELD(DPDMA_REF_CTRL, SRCSEL, 0, 3)
180
+REG32(TOPSW_MAIN_CTRL, 0xc0)
181
+ FIELD(TOPSW_MAIN_CTRL, CLKACT, 24, 1)
182
+ FIELD(TOPSW_MAIN_CTRL, DIVISOR0, 8, 6)
183
+ FIELD(TOPSW_MAIN_CTRL, SRCSEL, 0, 3)
184
+REG32(TOPSW_LSBUS_CTRL, 0xc4)
185
+ FIELD(TOPSW_LSBUS_CTRL, CLKACT, 24, 1)
186
+ FIELD(TOPSW_LSBUS_CTRL, DIVISOR0, 8, 6)
187
+ FIELD(TOPSW_LSBUS_CTRL, SRCSEL, 0, 3)
188
+REG32(DBG_TSTMP_CTRL, 0xf8)
189
+ FIELD(DBG_TSTMP_CTRL, DIVISOR0, 8, 6)
190
+ FIELD(DBG_TSTMP_CTRL, SRCSEL, 0, 3)
191
+REG32(RST_FPD_TOP, 0x100)
192
+ FIELD(RST_FPD_TOP, PCIE_CFG_RESET, 19, 1)
193
+ FIELD(RST_FPD_TOP, PCIE_BRIDGE_RESET, 18, 1)
194
+ FIELD(RST_FPD_TOP, PCIE_CTRL_RESET, 17, 1)
195
+ FIELD(RST_FPD_TOP, DP_RESET, 16, 1)
196
+ FIELD(RST_FPD_TOP, SWDT_RESET, 15, 1)
197
+ FIELD(RST_FPD_TOP, AFI_FM5_RESET, 12, 1)
198
+ FIELD(RST_FPD_TOP, AFI_FM4_RESET, 11, 1)
199
+ FIELD(RST_FPD_TOP, AFI_FM3_RESET, 10, 1)
200
+ FIELD(RST_FPD_TOP, AFI_FM2_RESET, 9, 1)
201
+ FIELD(RST_FPD_TOP, AFI_FM1_RESET, 8, 1)
202
+ FIELD(RST_FPD_TOP, AFI_FM0_RESET, 7, 1)
203
+ FIELD(RST_FPD_TOP, GDMA_RESET, 6, 1)
204
+ FIELD(RST_FPD_TOP, GPU_PP1_RESET, 5, 1)
205
+ FIELD(RST_FPD_TOP, GPU_PP0_RESET, 4, 1)
206
+ FIELD(RST_FPD_TOP, GPU_RESET, 3, 1)
207
+ FIELD(RST_FPD_TOP, GT_RESET, 2, 1)
208
+ FIELD(RST_FPD_TOP, SATA_RESET, 1, 1)
209
+REG32(RST_FPD_APU, 0x104)
210
+ FIELD(RST_FPD_APU, ACPU3_PWRON_RESET, 13, 1)
211
+ FIELD(RST_FPD_APU, ACPU2_PWRON_RESET, 12, 1)
212
+ FIELD(RST_FPD_APU, ACPU1_PWRON_RESET, 11, 1)
213
+ FIELD(RST_FPD_APU, ACPU0_PWRON_RESET, 10, 1)
214
+ FIELD(RST_FPD_APU, APU_L2_RESET, 8, 1)
215
+ FIELD(RST_FPD_APU, ACPU3_RESET, 3, 1)
216
+ FIELD(RST_FPD_APU, ACPU2_RESET, 2, 1)
217
+ FIELD(RST_FPD_APU, ACPU1_RESET, 1, 1)
218
+ FIELD(RST_FPD_APU, ACPU0_RESET, 0, 1)
219
+REG32(RST_DDR_SS, 0x108)
220
+ FIELD(RST_DDR_SS, DDR_RESET, 3, 1)
221
+ FIELD(RST_DDR_SS, APM_RESET, 2, 1)
222
+
223
+#define CRF_R_MAX (R_RST_DDR_SS + 1)
224
+
225
+struct XlnxZynqMPCRF {
226
+ SysBusDevice parent_obj;
227
+ MemoryRegion iomem;
228
+ qemu_irq irq_ir;
229
+
230
+ RegisterInfoArray *reg_array;
231
+ uint32_t regs[CRF_R_MAX];
232
+ RegisterInfo regs_info[CRF_R_MAX];
233
+};
234
+
235
+#endif
236
diff --git a/hw/misc/xlnx-zynqmp-crf.c b/hw/misc/xlnx-zynqmp-crf.c
237
new file mode 100644
238
index XXXXXXX..XXXXXXX
239
--- /dev/null
240
+++ b/hw/misc/xlnx-zynqmp-crf.c
241
@@ -XXX,XX +XXX,XX @@
242
+/*
243
+ * QEMU model of the CRF - Clock Reset FPD.
244
+ *
245
+ * Copyright (c) 2022 Xilinx Inc.
246
+ * SPDX-License-Identifier: GPL-2.0-or-later
247
+ * Written by Edgar E. Iglesias <edgar.iglesias@xilinx.com>
248
+ */
249
+
250
+#include "qemu/osdep.h"
251
+#include "hw/sysbus.h"
252
+#include "hw/register.h"
253
+#include "qemu/bitops.h"
254
+#include "qemu/log.h"
255
+#include "migration/vmstate.h"
256
+#include "hw/irq.h"
257
+#include "hw/misc/xlnx-zynqmp-crf.h"
258
+#include "target/arm/arm-powerctl.h"
259
+
260
+#ifndef XLNX_ZYNQMP_CRF_ERR_DEBUG
261
+#define XLNX_ZYNQMP_CRF_ERR_DEBUG 0
262
+#endif
263
+
264
+#define CRF_MAX_CPU 4
265
+
266
+static void ir_update_irq(XlnxZynqMPCRF *s)
267
+{
268
+ bool pending = s->regs[R_IR_STATUS] & ~s->regs[R_IR_MASK];
269
+ qemu_set_irq(s->irq_ir, pending);
270
+}
271
+
272
+static void ir_status_postw(RegisterInfo *reg, uint64_t val64)
273
+{
274
+ XlnxZynqMPCRF *s = XLNX_ZYNQMP_CRF(reg->opaque);
275
+ ir_update_irq(s);
276
+}
277
+
278
+static uint64_t ir_enable_prew(RegisterInfo *reg, uint64_t val64)
279
+{
280
+ XlnxZynqMPCRF *s = XLNX_ZYNQMP_CRF(reg->opaque);
281
+ uint32_t val = val64;
282
+
283
+ s->regs[R_IR_MASK] &= ~val;
284
+ ir_update_irq(s);
285
+ return 0;
286
+}
287
+
288
+static uint64_t ir_disable_prew(RegisterInfo *reg, uint64_t val64)
289
+{
290
+ XlnxZynqMPCRF *s = XLNX_ZYNQMP_CRF(reg->opaque);
291
+ uint32_t val = val64;
292
+
293
+ s->regs[R_IR_MASK] |= val;
294
+ ir_update_irq(s);
295
+ return 0;
296
+}
297
+
298
+static uint64_t rst_fpd_apu_prew(RegisterInfo *reg, uint64_t val64)
299
+{
300
+ XlnxZynqMPCRF *s = XLNX_ZYNQMP_CRF(reg->opaque);
301
+ uint32_t val = val64;
302
+ uint32_t val_old = s->regs[R_RST_FPD_APU];
303
+ unsigned int i;
304
+
305
+ for (i = 0; i < CRF_MAX_CPU; i++) {
306
+ uint32_t mask = (1 << (R_RST_FPD_APU_ACPU0_RESET_SHIFT + i));
307
+
308
+ if ((val ^ val_old) & mask) {
309
+ if (val & mask) {
310
+ arm_set_cpu_off(i);
311
+ } else {
312
+ arm_set_cpu_on_and_reset(i);
313
+ }
314
+ }
315
+ }
316
+ return val64;
317
+}
318
+
319
+static const RegisterAccessInfo crf_regs_info[] = {
320
+ { .name = "ERR_CTRL", .addr = A_ERR_CTRL,
321
+ },{ .name = "IR_STATUS", .addr = A_IR_STATUS,
322
+ .w1c = 0x1,
323
+ .post_write = ir_status_postw,
324
+ },{ .name = "IR_MASK", .addr = A_IR_MASK,
325
+ .reset = 0x1,
326
+ .ro = 0x1,
327
+ },{ .name = "IR_ENABLE", .addr = A_IR_ENABLE,
328
+ .pre_write = ir_enable_prew,
329
+ },{ .name = "IR_DISABLE", .addr = A_IR_DISABLE,
330
+ .pre_write = ir_disable_prew,
331
+ },{ .name = "CRF_WPROT", .addr = A_CRF_WPROT,
332
+ },{ .name = "APLL_CTRL", .addr = A_APLL_CTRL,
333
+ .reset = 0x12c09,
334
+ .rsvd = 0xf88c80f6,
335
+ },{ .name = "APLL_CFG", .addr = A_APLL_CFG,
336
+ .rsvd = 0x1801210,
337
+ },{ .name = "APLL_FRAC_CFG", .addr = A_APLL_FRAC_CFG,
338
+ .rsvd = 0x7e330000,
339
+ },{ .name = "DPLL_CTRL", .addr = A_DPLL_CTRL,
340
+ .reset = 0x2c09,
341
+ .rsvd = 0xf88c80f6,
342
+ },{ .name = "DPLL_CFG", .addr = A_DPLL_CFG,
343
+ .rsvd = 0x1801210,
344
+ },{ .name = "DPLL_FRAC_CFG", .addr = A_DPLL_FRAC_CFG,
345
+ .rsvd = 0x7e330000,
346
+ },{ .name = "VPLL_CTRL", .addr = A_VPLL_CTRL,
347
+ .reset = 0x12809,
348
+ .rsvd = 0xf88c80f6,
349
+ },{ .name = "VPLL_CFG", .addr = A_VPLL_CFG,
350
+ .rsvd = 0x1801210,
351
+ },{ .name = "VPLL_FRAC_CFG", .addr = A_VPLL_FRAC_CFG,
352
+ .rsvd = 0x7e330000,
353
+ },{ .name = "PLL_STATUS", .addr = A_PLL_STATUS,
354
+ .reset = 0x3f,
355
+ .rsvd = 0xc0,
356
+ .ro = 0x3f,
357
+ },{ .name = "APLL_TO_LPD_CTRL", .addr = A_APLL_TO_LPD_CTRL,
358
+ .reset = 0x400,
359
+ .rsvd = 0xc0ff,
360
+ },{ .name = "DPLL_TO_LPD_CTRL", .addr = A_DPLL_TO_LPD_CTRL,
361
+ .reset = 0x400,
362
+ .rsvd = 0xc0ff,
363
+ },{ .name = "VPLL_TO_LPD_CTRL", .addr = A_VPLL_TO_LPD_CTRL,
364
+ .reset = 0x400,
365
+ .rsvd = 0xc0ff,
366
+ },{ .name = "ACPU_CTRL", .addr = A_ACPU_CTRL,
367
+ .reset = 0x3000400,
368
+ .rsvd = 0xfcffc0f8,
369
+ },{ .name = "DBG_TRACE_CTRL", .addr = A_DBG_TRACE_CTRL,
370
+ .reset = 0x2500,
371
+ .rsvd = 0xfeffc0f8,
372
+ },{ .name = "DBG_FPD_CTRL", .addr = A_DBG_FPD_CTRL,
373
+ .reset = 0x1002500,
374
+ .rsvd = 0xfeffc0f8,
375
+ },{ .name = "DP_VIDEO_REF_CTRL", .addr = A_DP_VIDEO_REF_CTRL,
376
+ .reset = 0x1002300,
377
+ .rsvd = 0xfec0c0f8,
378
+ },{ .name = "DP_AUDIO_REF_CTRL", .addr = A_DP_AUDIO_REF_CTRL,
379
+ .reset = 0x1032300,
380
+ .rsvd = 0xfec0c0f8,
381
+ },{ .name = "DP_STC_REF_CTRL", .addr = A_DP_STC_REF_CTRL,
382
+ .reset = 0x1203200,
383
+ .rsvd = 0xfec0c0f8,
384
+ },{ .name = "DDR_CTRL", .addr = A_DDR_CTRL,
385
+ .reset = 0x1000500,
386
+ .rsvd = 0xfeffc0f8,
387
+ },{ .name = "GPU_REF_CTRL", .addr = A_GPU_REF_CTRL,
388
+ .reset = 0x1500,
389
+ .rsvd = 0xf8ffc0f8,
390
+ },{ .name = "SATA_REF_CTRL", .addr = A_SATA_REF_CTRL,
391
+ .reset = 0x1001600,
392
+ .rsvd = 0xfeffc0f8,
393
+ },{ .name = "PCIE_REF_CTRL", .addr = A_PCIE_REF_CTRL,
394
+ .reset = 0x1500,
395
+ .rsvd = 0xfeffc0f8,
396
+ },{ .name = "GDMA_REF_CTRL", .addr = A_GDMA_REF_CTRL,
397
+ .reset = 0x1000500,
398
+ .rsvd = 0xfeffc0f8,
399
+ },{ .name = "DPDMA_REF_CTRL", .addr = A_DPDMA_REF_CTRL,
400
+ .reset = 0x1000500,
401
+ .rsvd = 0xfeffc0f8,
402
+ },{ .name = "TOPSW_MAIN_CTRL", .addr = A_TOPSW_MAIN_CTRL,
403
+ .reset = 0x1000400,
404
+ .rsvd = 0xfeffc0f8,
405
+ },{ .name = "TOPSW_LSBUS_CTRL", .addr = A_TOPSW_LSBUS_CTRL,
406
+ .reset = 0x1000800,
407
+ .rsvd = 0xfeffc0f8,
408
+ },{ .name = "DBG_TSTMP_CTRL", .addr = A_DBG_TSTMP_CTRL,
409
+ .reset = 0xa00,
410
+ .rsvd = 0xffffc0f8,
411
+ },
412
+ { .name = "RST_FPD_TOP", .addr = A_RST_FPD_TOP,
413
+ .reset = 0xf9ffe,
414
+ .rsvd = 0xf06001,
415
+ },{ .name = "RST_FPD_APU", .addr = A_RST_FPD_APU,
416
+ .reset = 0x3d0f,
417
+ .rsvd = 0xc2f0,
418
+ .pre_write = rst_fpd_apu_prew,
419
+ },{ .name = "RST_DDR_SS", .addr = A_RST_DDR_SS,
420
+ .reset = 0xf,
421
+ .rsvd = 0xf3,
422
+ }
423
+};
424
+
425
+static void crf_reset_enter(Object *obj, ResetType type)
426
+{
427
+ XlnxZynqMPCRF *s = XLNX_ZYNQMP_CRF(obj);
428
+ unsigned int i;
429
+
430
+ for (i = 0; i < ARRAY_SIZE(s->regs_info); ++i) {
431
+ register_reset(&s->regs_info[i]);
432
+ }
433
+}
434
+
435
+static void crf_reset_hold(Object *obj)
436
+{
437
+ XlnxZynqMPCRF *s = XLNX_ZYNQMP_CRF(obj);
438
+ ir_update_irq(s);
439
+}
440
+
441
+static const MemoryRegionOps crf_ops = {
442
+ .read = register_read_memory,
443
+ .write = register_write_memory,
444
+ .endianness = DEVICE_LITTLE_ENDIAN,
445
+ .valid = {
446
+ .min_access_size = 4,
447
+ .max_access_size = 4,
448
+ },
449
+};
450
+
451
+static void crf_init(Object *obj)
452
+{
453
+ XlnxZynqMPCRF *s = XLNX_ZYNQMP_CRF(obj);
454
+ SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
455
+
456
+ s->reg_array =
457
+ register_init_block32(DEVICE(obj), crf_regs_info,
458
+ ARRAY_SIZE(crf_regs_info),
459
+ s->regs_info, s->regs,
460
+ &crf_ops,
461
+ XLNX_ZYNQMP_CRF_ERR_DEBUG,
462
+ CRF_R_MAX * 4);
463
+ sysbus_init_mmio(sbd, &s->reg_array->mem);
464
+ sysbus_init_irq(sbd, &s->irq_ir);
465
+}
466
+
467
+static void crf_finalize(Object *obj)
468
+{
469
+ XlnxZynqMPCRF *s = XLNX_ZYNQMP_CRF(obj);
470
+ register_finalize_block(s->reg_array);
471
+}
472
+
473
+static const VMStateDescription vmstate_crf = {
474
+ .name = TYPE_XLNX_ZYNQMP_CRF,
475
+ .version_id = 1,
476
+ .minimum_version_id = 1,
477
+ .fields = (VMStateField[]) {
478
+ VMSTATE_UINT32_ARRAY(regs, XlnxZynqMPCRF, CRF_R_MAX),
479
+ VMSTATE_END_OF_LIST(),
480
+ }
481
+};
482
+
483
+static void crf_class_init(ObjectClass *klass, void *data)
484
+{
485
+ ResettableClass *rc = RESETTABLE_CLASS(klass);
486
+ DeviceClass *dc = DEVICE_CLASS(klass);
487
+
488
+ dc->vmsd = &vmstate_crf;
489
+ rc->phases.enter = crf_reset_enter;
490
+ rc->phases.hold = crf_reset_hold;
491
+}
492
+
493
+static const TypeInfo crf_info = {
494
+ .name = TYPE_XLNX_ZYNQMP_CRF,
495
+ .parent = TYPE_SYS_BUS_DEVICE,
496
+ .instance_size = sizeof(XlnxZynqMPCRF),
497
+ .class_init = crf_class_init,
498
+ .instance_init = crf_init,
499
+ .instance_finalize = crf_finalize,
500
+};
501
+
502
+static void crf_register_types(void)
503
+{
504
+ type_register_static(&crf_info);
505
+}
506
+
507
+type_init(crf_register_types)
508
diff --git a/hw/misc/meson.build b/hw/misc/meson.build
58
index XXXXXXX..XXXXXXX 100644
509
index XXXXXXX..XXXXXXX 100644
59
--- a/docs/system/target-arm.rst
510
--- a/hw/misc/meson.build
60
+++ b/docs/system/target-arm.rst
511
+++ b/hw/misc/meson.build
61
@@ -XXX,XX +XXX,XX @@ undocumented; you can get a complete list by running
512
@@ -XXX,XX +XXX,XX @@ softmmu_ss.add(when: 'CONFIG_RASPI', if_true: files(
62
arm/mps2
513
))
63
arm/musca
514
softmmu_ss.add(when: 'CONFIG_SLAVIO', if_true: files('slavio_misc.c'))
64
arm/realview
515
softmmu_ss.add(when: 'CONFIG_ZYNQ', if_true: files('zynq_slcr.c'))
65
+ arm/sbsa
516
+specific_ss.add(when: 'CONFIG_XLNX_ZYNQMP_ARM', if_true: files('xlnx-zynqmp-crf.c'))
66
arm/versatile
517
softmmu_ss.add(when: 'CONFIG_XLNX_VERSAL', if_true: files(
67
arm/vexpress
518
'xlnx-versal-xramc.c',
68
arm/aspeed
519
'xlnx-versal-pmc-iou-slcr.c',
69
--
520
--
70
2.20.1
521
2.25.1
71
522
72
523
diff view generated by jsdifflib
1
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
1
From: "Edgar E. Iglesias" <edgar.iglesias@xilinx.com>
2
2
3
omap2420_mpu_init() introduced in commit 827df9f3c5f ("Add basic
3
Connect the ZynqMP CRF - Clock Reset FPD device.
4
OMAP2 chip support") takes care of creating the 3 UARTs.
5
4
6
Then commit 58a26b477e9 ("Emulate a serial bluetooth HCI with H4+
5
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
7
extensions and attach to n8x0's UART") added n8x0_uart_setup()
6
Reviewed-by: Francisco Iglesias <francisco.iglesias@xilinx.com>
8
which create the UART and connects it to an IRQ output,
7
Reviewed-by: Luc Michel <luc@lmichel.fr>
9
overwritting the existing peripheral and its IRQ connection.
8
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
10
This is incorrect.
9
Message-id: 20220316164645.2303510-5-edgar.iglesias@gmail.com
11
12
Fortunately we don't need to fix this, because commit 6da68df7f9b
13
("hw/arm/nseries: Replace the bluetooth chardev with a "null"
14
chardev") removed the use of this peripheral. We can simply
15
remove the code.
16
17
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
18
Message-id: 20201107193403.436146-4-f4bug@amsat.org
19
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
20
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
21
---
11
---
22
hw/arm/nseries.c | 11 -----------
12
include/hw/arm/xlnx-zynqmp.h | 2 ++
23
1 file changed, 11 deletions(-)
13
hw/arm/xlnx-zynqmp.c | 16 ++++++++++++++++
14
2 files changed, 18 insertions(+)
24
15
25
diff --git a/hw/arm/nseries.c b/hw/arm/nseries.c
16
diff --git a/include/hw/arm/xlnx-zynqmp.h b/include/hw/arm/xlnx-zynqmp.h
26
index XXXXXXX..XXXXXXX 100644
17
index XXXXXXX..XXXXXXX 100644
27
--- a/hw/arm/nseries.c
18
--- a/include/hw/arm/xlnx-zynqmp.h
28
+++ b/hw/arm/nseries.c
19
+++ b/include/hw/arm/xlnx-zynqmp.h
29
@@ -XXX,XX +XXX,XX @@ static void n8x0_cbus_setup(struct n800_s *s)
20
@@ -XXX,XX +XXX,XX @@
30
cbus_attach(cbus, s->tahvo = tahvo_init(tahvo_irq, 1));
21
#include "hw/nvram/xlnx-bbram.h"
22
#include "hw/nvram/xlnx-zynqmp-efuse.h"
23
#include "hw/or-irq.h"
24
+#include "hw/misc/xlnx-zynqmp-crf.h"
25
26
#define TYPE_XLNX_ZYNQMP "xlnx-zynqmp"
27
OBJECT_DECLARE_SIMPLE_TYPE(XlnxZynqMPState, XLNX_ZYNQMP)
28
@@ -XXX,XX +XXX,XX @@ struct XlnxZynqMPState {
29
XlnxZDMA adma[XLNX_ZYNQMP_NUM_ADMA_CH];
30
XlnxCSUDMA qspi_dma;
31
qemu_or_irq qspi_irq_orgate;
32
+ XlnxZynqMPCRF crf;
33
34
char *boot_cpu;
35
ARMCPU *boot_cpu_ptr;
36
diff --git a/hw/arm/xlnx-zynqmp.c b/hw/arm/xlnx-zynqmp.c
37
index XXXXXXX..XXXXXXX 100644
38
--- a/hw/arm/xlnx-zynqmp.c
39
+++ b/hw/arm/xlnx-zynqmp.c
40
@@ -XXX,XX +XXX,XX @@
41
#define QSPI_DMA_ADDR 0xff0f0800
42
#define NUM_QSPI_IRQ_LINES 2
43
44
+#define CRF_ADDR 0xfd1a0000
45
+#define CRF_IRQ 120
46
+
47
/* Serializer/Deserializer. */
48
#define SERDES_ADDR 0xfd400000
49
#define SERDES_SIZE 0x20000
50
@@ -XXX,XX +XXX,XX @@ static void xlnx_zynqmp_create_efuse(XlnxZynqMPState *s, qemu_irq *gic)
51
sysbus_connect_irq(sbd, 0, gic[EFUSE_IRQ]);
31
}
52
}
32
53
33
-static void n8x0_uart_setup(struct n800_s *s)
54
+static void xlnx_zynqmp_create_crf(XlnxZynqMPState *s, qemu_irq *gic)
34
-{
55
+{
35
- Chardev *radio = qemu_chr_new("bt-dummy-uart", "null", NULL);
56
+ SysBusDevice *sbd;
36
- /*
57
+
37
- * Note: We used to connect N8X0_BT_RESET_GPIO and N8X0_BT_WKUP_GPIO
58
+ object_initialize_child(OBJECT(s), "crf", &s->crf, TYPE_XLNX_ZYNQMP_CRF);
38
- * here, but this code has been removed with the bluetooth backend.
59
+ sbd = SYS_BUS_DEVICE(&s->crf);
39
- */
60
+
40
- omap_uart_attach(s->mpu->uart[BT_UART], radio);
61
+ sysbus_realize(sbd, &error_fatal);
41
-}
62
+ sysbus_mmio_map(sbd, 0, CRF_ADDR);
42
-
63
+ sysbus_connect_irq(sbd, 0, gic[CRF_IRQ]);
43
static void n8x0_usb_setup(struct n800_s *s)
64
+}
65
+
66
static void xlnx_zynqmp_create_unimp_mmio(XlnxZynqMPState *s)
44
{
67
{
45
SysBusDevice *dev;
68
static const struct UnimpInfo {
46
@@ -XXX,XX +XXX,XX @@ static void n8x0_init(MachineState *machine,
69
@@ -XXX,XX +XXX,XX @@ static void xlnx_zynqmp_realize(DeviceState *dev, Error **errp)
47
n8x0_spi_setup(s);
70
48
n8x0_dss_setup(s);
71
xlnx_zynqmp_create_bbram(s, gic_spi);
49
n8x0_cbus_setup(s);
72
xlnx_zynqmp_create_efuse(s, gic_spi);
50
- n8x0_uart_setup(s);
73
+ xlnx_zynqmp_create_crf(s, gic_spi);
51
if (machine_usb(machine)) {
74
xlnx_zynqmp_create_unimp_mmio(s);
52
n8x0_usb_setup(s);
75
53
}
76
for (i = 0; i < XLNX_ZYNQMP_NUM_GDMA_CH; i++) {
54
--
77
--
55
2.20.1
78
2.25.1
56
79
57
80
diff view generated by jsdifflib
New patch
1
From: "Edgar E. Iglesias" <edgar.iglesias@xilinx.com>
1
2
3
Add a model of the Xilinx ZynqMP APU Control.
4
5
Reviewed-by: Luc Michel <luc@lmichel.fr>
6
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
7
Message-id: 20220316164645.2303510-6-edgar.iglesias@gmail.com
8
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
9
---
10
include/hw/misc/xlnx-zynqmp-apu-ctrl.h | 93 +++++++++
11
hw/misc/xlnx-zynqmp-apu-ctrl.c | 253 +++++++++++++++++++++++++
12
hw/misc/meson.build | 1 +
13
3 files changed, 347 insertions(+)
14
create mode 100644 include/hw/misc/xlnx-zynqmp-apu-ctrl.h
15
create mode 100644 hw/misc/xlnx-zynqmp-apu-ctrl.c
16
17
diff --git a/include/hw/misc/xlnx-zynqmp-apu-ctrl.h b/include/hw/misc/xlnx-zynqmp-apu-ctrl.h
18
new file mode 100644
19
index XXXXXXX..XXXXXXX
20
--- /dev/null
21
+++ b/include/hw/misc/xlnx-zynqmp-apu-ctrl.h
22
@@ -XXX,XX +XXX,XX @@
23
+/*
24
+ * QEMU model of ZynqMP APU Control.
25
+ *
26
+ * Copyright (c) 2013-2022 Xilinx Inc
27
+ * SPDX-License-Identifier: GPL-2.0-or-later
28
+ *
29
+ * Written by Peter Crosthwaite <peter.crosthwaite@xilinx.com> and
30
+ * Edgar E. Iglesias <edgar.iglesias@xilinx.com>
31
+ *
32
+ */
33
+#ifndef HW_MISC_XLNX_ZYNQMP_APU_CTRL_H
34
+#define HW_MISC_XLNX_ZYNQMP_APU_CTRL_H
35
+
36
+#include "hw/sysbus.h"
37
+#include "hw/register.h"
38
+#include "target/arm/cpu.h"
39
+
40
+#define TYPE_XLNX_ZYNQMP_APU_CTRL "xlnx.apu-ctrl"
41
+OBJECT_DECLARE_SIMPLE_TYPE(XlnxZynqMPAPUCtrl, XLNX_ZYNQMP_APU_CTRL)
42
+
43
+REG32(APU_ERR_CTRL, 0x0)
44
+ FIELD(APU_ERR_CTRL, PSLVERR, 0, 1)
45
+REG32(ISR, 0x10)
46
+ FIELD(ISR, INV_APB, 0, 1)
47
+REG32(IMR, 0x14)
48
+ FIELD(IMR, INV_APB, 0, 1)
49
+REG32(IEN, 0x18)
50
+ FIELD(IEN, INV_APB, 0, 1)
51
+REG32(IDS, 0x1c)
52
+ FIELD(IDS, INV_APB, 0, 1)
53
+REG32(CONFIG_0, 0x20)
54
+ FIELD(CONFIG_0, CFGTE, 24, 4)
55
+ FIELD(CONFIG_0, CFGEND, 16, 4)
56
+ FIELD(CONFIG_0, VINITHI, 8, 4)
57
+ FIELD(CONFIG_0, AA64NAA32, 0, 4)
58
+REG32(CONFIG_1, 0x24)
59
+ FIELD(CONFIG_1, L2RSTDISABLE, 29, 1)
60
+ FIELD(CONFIG_1, L1RSTDISABLE, 28, 1)
61
+ FIELD(CONFIG_1, CP15DISABLE, 0, 4)
62
+REG32(RVBARADDR0L, 0x40)
63
+ FIELD(RVBARADDR0L, ADDR, 2, 30)
64
+REG32(RVBARADDR0H, 0x44)
65
+ FIELD(RVBARADDR0H, ADDR, 0, 8)
66
+REG32(RVBARADDR1L, 0x48)
67
+ FIELD(RVBARADDR1L, ADDR, 2, 30)
68
+REG32(RVBARADDR1H, 0x4c)
69
+ FIELD(RVBARADDR1H, ADDR, 0, 8)
70
+REG32(RVBARADDR2L, 0x50)
71
+ FIELD(RVBARADDR2L, ADDR, 2, 30)
72
+REG32(RVBARADDR2H, 0x54)
73
+ FIELD(RVBARADDR2H, ADDR, 0, 8)
74
+REG32(RVBARADDR3L, 0x58)
75
+ FIELD(RVBARADDR3L, ADDR, 2, 30)
76
+REG32(RVBARADDR3H, 0x5c)
77
+ FIELD(RVBARADDR3H, ADDR, 0, 8)
78
+REG32(ACE_CTRL, 0x60)
79
+ FIELD(ACE_CTRL, AWQOS, 16, 4)
80
+ FIELD(ACE_CTRL, ARQOS, 0, 4)
81
+REG32(SNOOP_CTRL, 0x80)
82
+ FIELD(SNOOP_CTRL, ACE_INACT, 4, 1)
83
+ FIELD(SNOOP_CTRL, ACP_INACT, 0, 1)
84
+REG32(PWRCTL, 0x90)
85
+ FIELD(PWRCTL, CLREXMONREQ, 17, 1)
86
+ FIELD(PWRCTL, L2FLUSHREQ, 16, 1)
87
+ FIELD(PWRCTL, CPUPWRDWNREQ, 0, 4)
88
+REG32(PWRSTAT, 0x94)
89
+ FIELD(PWRSTAT, CLREXMONACK, 17, 1)
90
+ FIELD(PWRSTAT, L2FLUSHDONE, 16, 1)
91
+ FIELD(PWRSTAT, DBGNOPWRDWN, 0, 4)
92
+
93
+#define APU_R_MAX ((R_PWRSTAT) + 1)
94
+
95
+#define APU_MAX_CPU 4
96
+
97
+struct XlnxZynqMPAPUCtrl {
98
+ SysBusDevice busdev;
99
+
100
+ ARMCPU *cpus[APU_MAX_CPU];
101
+ /* WFIs towards PMU. */
102
+ qemu_irq wfi_out[4];
103
+ /* CPU Power status towards INTC Redirect. */
104
+ qemu_irq cpu_power_status[4];
105
+ qemu_irq irq_imr;
106
+
107
+ uint8_t cpu_pwrdwn_req;
108
+ uint8_t cpu_in_wfi;
109
+
110
+ RegisterInfoArray *reg_array;
111
+ uint32_t regs[APU_R_MAX];
112
+ RegisterInfo regs_info[APU_R_MAX];
113
+};
114
+
115
+#endif
116
diff --git a/hw/misc/xlnx-zynqmp-apu-ctrl.c b/hw/misc/xlnx-zynqmp-apu-ctrl.c
117
new file mode 100644
118
index XXXXXXX..XXXXXXX
119
--- /dev/null
120
+++ b/hw/misc/xlnx-zynqmp-apu-ctrl.c
121
@@ -XXX,XX +XXX,XX @@
122
+/*
123
+ * QEMU model of the ZynqMP APU Control.
124
+ *
125
+ * Copyright (c) 2013-2022 Xilinx Inc
126
+ * SPDX-License-Identifier: GPL-2.0-or-later
127
+ *
128
+ * Written by Peter Crosthwaite <peter.crosthwaite@xilinx.com> and
129
+ * Edgar E. Iglesias <edgar.iglesias@xilinx.com>
130
+ */
131
+
132
+#include "qemu/osdep.h"
133
+#include "qapi/error.h"
134
+#include "qemu/log.h"
135
+#include "migration/vmstate.h"
136
+#include "hw/qdev-properties.h"
137
+#include "hw/sysbus.h"
138
+#include "hw/irq.h"
139
+#include "hw/register.h"
140
+
141
+#include "qemu/bitops.h"
142
+#include "qapi/qmp/qerror.h"
143
+
144
+#include "hw/misc/xlnx-zynqmp-apu-ctrl.h"
145
+
146
+#ifndef XILINX_ZYNQMP_APU_ERR_DEBUG
147
+#define XILINX_ZYNQMP_APU_ERR_DEBUG 0
148
+#endif
149
+
150
+static void update_wfi_out(void *opaque)
151
+{
152
+ XlnxZynqMPAPUCtrl *s = XLNX_ZYNQMP_APU_CTRL(opaque);
153
+ unsigned int i, wfi_pending;
154
+
155
+ wfi_pending = s->cpu_pwrdwn_req & s->cpu_in_wfi;
156
+ for (i = 0; i < APU_MAX_CPU; i++) {
157
+ qemu_set_irq(s->wfi_out[i], !!(wfi_pending & (1 << i)));
158
+ }
159
+}
160
+
161
+static void zynqmp_apu_rvbar_post_write(RegisterInfo *reg, uint64_t val)
162
+{
163
+ XlnxZynqMPAPUCtrl *s = XLNX_ZYNQMP_APU_CTRL(reg->opaque);
164
+ int i;
165
+
166
+ for (i = 0; i < APU_MAX_CPU; ++i) {
167
+ uint64_t rvbar = s->regs[R_RVBARADDR0L + 2 * i] +
168
+ ((uint64_t)s->regs[R_RVBARADDR0H + 2 * i] << 32);
169
+ if (s->cpus[i]) {
170
+ object_property_set_int(OBJECT(s->cpus[i]), "rvbar", rvbar,
171
+ &error_abort);
172
+ }
173
+ }
174
+}
175
+
176
+static void zynqmp_apu_pwrctl_post_write(RegisterInfo *reg, uint64_t val)
177
+{
178
+ XlnxZynqMPAPUCtrl *s = XLNX_ZYNQMP_APU_CTRL(reg->opaque);
179
+ unsigned int i, new;
180
+
181
+ for (i = 0; i < APU_MAX_CPU; i++) {
182
+ new = val & (1 << i);
183
+ /* Check if CPU's CPUPWRDNREQ has changed. If yes, update GPIOs. */
184
+ if (new != (s->cpu_pwrdwn_req & (1 << i))) {
185
+ qemu_set_irq(s->cpu_power_status[i], !!new);
186
+ }
187
+ s->cpu_pwrdwn_req &= ~(1 << i);
188
+ s->cpu_pwrdwn_req |= new;
189
+ }
190
+ update_wfi_out(s);
191
+}
192
+
193
+static void imr_update_irq(XlnxZynqMPAPUCtrl *s)
194
+{
195
+ bool pending = s->regs[R_ISR] & ~s->regs[R_IMR];
196
+ qemu_set_irq(s->irq_imr, pending);
197
+}
198
+
199
+static void isr_postw(RegisterInfo *reg, uint64_t val64)
200
+{
201
+ XlnxZynqMPAPUCtrl *s = XLNX_ZYNQMP_APU_CTRL(reg->opaque);
202
+ imr_update_irq(s);
203
+}
204
+
205
+static uint64_t ien_prew(RegisterInfo *reg, uint64_t val64)
206
+{
207
+ XlnxZynqMPAPUCtrl *s = XLNX_ZYNQMP_APU_CTRL(reg->opaque);
208
+ uint32_t val = val64;
209
+
210
+ s->regs[R_IMR] &= ~val;
211
+ imr_update_irq(s);
212
+ return 0;
213
+}
214
+
215
+static uint64_t ids_prew(RegisterInfo *reg, uint64_t val64)
216
+{
217
+ XlnxZynqMPAPUCtrl *s = XLNX_ZYNQMP_APU_CTRL(reg->opaque);
218
+ uint32_t val = val64;
219
+
220
+ s->regs[R_IMR] |= val;
221
+ imr_update_irq(s);
222
+ return 0;
223
+}
224
+
225
+static const RegisterAccessInfo zynqmp_apu_regs_info[] = {
226
+#define RVBAR_REGDEF(n) \
227
+ { .name = "RVBAR CPU " #n " Low", .addr = A_RVBARADDR ## n ## L, \
228
+ .reset = 0xffff0000ul, \
229
+ .post_write = zynqmp_apu_rvbar_post_write, \
230
+ },{ .name = "RVBAR CPU " #n " High", .addr = A_RVBARADDR ## n ## H, \
231
+ .post_write = zynqmp_apu_rvbar_post_write, \
232
+ }
233
+ { .name = "ERR_CTRL", .addr = A_APU_ERR_CTRL,
234
+ },{ .name = "ISR", .addr = A_ISR,
235
+ .w1c = 0x1,
236
+ .post_write = isr_postw,
237
+ },{ .name = "IMR", .addr = A_IMR,
238
+ .reset = 0x1,
239
+ .ro = 0x1,
240
+ },{ .name = "IEN", .addr = A_IEN,
241
+ .pre_write = ien_prew,
242
+ },{ .name = "IDS", .addr = A_IDS,
243
+ .pre_write = ids_prew,
244
+ },{ .name = "CONFIG_0", .addr = A_CONFIG_0,
245
+ .reset = 0xf0f,
246
+ },{ .name = "CONFIG_1", .addr = A_CONFIG_1,
247
+ },
248
+ RVBAR_REGDEF(0),
249
+ RVBAR_REGDEF(1),
250
+ RVBAR_REGDEF(2),
251
+ RVBAR_REGDEF(3),
252
+ { .name = "ACE_CTRL", .addr = A_ACE_CTRL,
253
+ .reset = 0xf000f,
254
+ },{ .name = "SNOOP_CTRL", .addr = A_SNOOP_CTRL,
255
+ },{ .name = "PWRCTL", .addr = A_PWRCTL,
256
+ .post_write = zynqmp_apu_pwrctl_post_write,
257
+ },{ .name = "PWRSTAT", .addr = A_PWRSTAT,
258
+ .ro = 0x3000f,
259
+ }
260
+};
261
+
262
+static void zynqmp_apu_reset_enter(Object *obj, ResetType type)
263
+{
264
+ XlnxZynqMPAPUCtrl *s = XLNX_ZYNQMP_APU_CTRL(obj);
265
+ int i;
266
+
267
+ for (i = 0; i < APU_R_MAX; ++i) {
268
+ register_reset(&s->regs_info[i]);
269
+ }
270
+
271
+ s->cpu_pwrdwn_req = 0;
272
+ s->cpu_in_wfi = 0;
273
+}
274
+
275
+static void zynqmp_apu_reset_hold(Object *obj)
276
+{
277
+ XlnxZynqMPAPUCtrl *s = XLNX_ZYNQMP_APU_CTRL(obj);
278
+
279
+ update_wfi_out(s);
280
+ imr_update_irq(s);
281
+}
282
+
283
+static const MemoryRegionOps zynqmp_apu_ops = {
284
+ .read = register_read_memory,
285
+ .write = register_write_memory,
286
+ .endianness = DEVICE_LITTLE_ENDIAN,
287
+ .valid = {
288
+ .min_access_size = 4,
289
+ .max_access_size = 4,
290
+ }
291
+};
292
+
293
+static void zynqmp_apu_handle_wfi(void *opaque, int irq, int level)
294
+{
295
+ XlnxZynqMPAPUCtrl *s = XLNX_ZYNQMP_APU_CTRL(opaque);
296
+
297
+ s->cpu_in_wfi = deposit32(s->cpu_in_wfi, irq, 1, level);
298
+ update_wfi_out(s);
299
+}
300
+
301
+static void zynqmp_apu_init(Object *obj)
302
+{
303
+ XlnxZynqMPAPUCtrl *s = XLNX_ZYNQMP_APU_CTRL(obj);
304
+ int i;
305
+
306
+ s->reg_array =
307
+ register_init_block32(DEVICE(obj), zynqmp_apu_regs_info,
308
+ ARRAY_SIZE(zynqmp_apu_regs_info),
309
+ s->regs_info, s->regs,
310
+ &zynqmp_apu_ops,
311
+ XILINX_ZYNQMP_APU_ERR_DEBUG,
312
+ APU_R_MAX * 4);
313
+ sysbus_init_mmio(SYS_BUS_DEVICE(obj), &s->reg_array->mem);
314
+ sysbus_init_irq(SYS_BUS_DEVICE(obj), &s->irq_imr);
315
+
316
+ for (i = 0; i < APU_MAX_CPU; ++i) {
317
+ g_autofree gchar *prop_name = g_strdup_printf("cpu%d", i);
318
+ object_property_add_link(obj, prop_name, TYPE_ARM_CPU,
319
+ (Object **)&s->cpus[i],
320
+ qdev_prop_allow_set_link_before_realize,
321
+ OBJ_PROP_LINK_STRONG);
322
+ }
323
+
324
+ /* wfi_out is used to connect to PMU GPIs. */
325
+ qdev_init_gpio_out_named(DEVICE(obj), s->wfi_out, "wfi_out", 4);
326
+ /* CPU_POWER_STATUS is used to connect to INTC redirect. */
327
+ qdev_init_gpio_out_named(DEVICE(obj), s->cpu_power_status,
328
+ "CPU_POWER_STATUS", 4);
329
+ /* wfi_in is used as input from CPUs as wfi request. */
330
+ qdev_init_gpio_in_named(DEVICE(obj), zynqmp_apu_handle_wfi, "wfi_in", 4);
331
+}
332
+
333
+static void zynqmp_apu_finalize(Object *obj)
334
+{
335
+ XlnxZynqMPAPUCtrl *s = XLNX_ZYNQMP_APU_CTRL(obj);
336
+ register_finalize_block(s->reg_array);
337
+}
338
+
339
+static const VMStateDescription vmstate_zynqmp_apu = {
340
+ .name = TYPE_XLNX_ZYNQMP_APU_CTRL,
341
+ .version_id = 1,
342
+ .minimum_version_id = 1,
343
+ .fields = (VMStateField[]) {
344
+ VMSTATE_UINT32_ARRAY(regs, XlnxZynqMPAPUCtrl, APU_R_MAX),
345
+ VMSTATE_END_OF_LIST(),
346
+ }
347
+};
348
+
349
+static void zynqmp_apu_class_init(ObjectClass *klass, void *data)
350
+{
351
+ ResettableClass *rc = RESETTABLE_CLASS(klass);
352
+ DeviceClass *dc = DEVICE_CLASS(klass);
353
+
354
+ dc->vmsd = &vmstate_zynqmp_apu;
355
+
356
+ rc->phases.enter = zynqmp_apu_reset_enter;
357
+ rc->phases.hold = zynqmp_apu_reset_hold;
358
+}
359
+
360
+static const TypeInfo zynqmp_apu_info = {
361
+ .name = TYPE_XLNX_ZYNQMP_APU_CTRL,
362
+ .parent = TYPE_SYS_BUS_DEVICE,
363
+ .instance_size = sizeof(XlnxZynqMPAPUCtrl),
364
+ .class_init = zynqmp_apu_class_init,
365
+ .instance_init = zynqmp_apu_init,
366
+ .instance_finalize = zynqmp_apu_finalize,
367
+};
368
+
369
+static void zynqmp_apu_register_types(void)
370
+{
371
+ type_register_static(&zynqmp_apu_info);
372
+}
373
+
374
+type_init(zynqmp_apu_register_types)
375
diff --git a/hw/misc/meson.build b/hw/misc/meson.build
376
index XXXXXXX..XXXXXXX 100644
377
--- a/hw/misc/meson.build
378
+++ b/hw/misc/meson.build
379
@@ -XXX,XX +XXX,XX @@ softmmu_ss.add(when: 'CONFIG_RASPI', if_true: files(
380
softmmu_ss.add(when: 'CONFIG_SLAVIO', if_true: files('slavio_misc.c'))
381
softmmu_ss.add(when: 'CONFIG_ZYNQ', if_true: files('zynq_slcr.c'))
382
specific_ss.add(when: 'CONFIG_XLNX_ZYNQMP_ARM', if_true: files('xlnx-zynqmp-crf.c'))
383
+specific_ss.add(when: 'CONFIG_XLNX_ZYNQMP_ARM', if_true: files('xlnx-zynqmp-apu-ctrl.c'))
384
softmmu_ss.add(when: 'CONFIG_XLNX_VERSAL', if_true: files(
385
'xlnx-versal-xramc.c',
386
'xlnx-versal-pmc-iou-slcr.c',
387
--
388
2.25.1
diff view generated by jsdifflib
1
From: Xinhao Zhang <zhangxinhao1@huawei.com>
1
From: "Edgar E. Iglesias" <edgar.iglesias@xilinx.com>
2
2
3
Fix code style. Don't use '#' flag of printf format ('%#') in
3
Connect the ZynqMP APU Control device.
4
format strings, use '0x' prefix instead
5
4
6
Signed-off-by: Xinhao Zhang <zhangxinhao1@huawei.com>
5
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
7
Signed-off-by: Kai Deng <dengkai1@huawei.com>
6
Reviewed-by: Francisco Iglesias <francisco.iglesias@xilinx.com>
8
Message-id: 20201103114529.638233-2-zhangxinhao1@huawei.com
7
Reviewed-by: Luc Michel <luc@lmichel.fr>
9
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
8
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
9
Message-id: 20220316164645.2303510-7-edgar.iglesias@gmail.com
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
11
---
11
---
12
target/arm/translate-a64.c | 4 ++--
12
include/hw/arm/xlnx-zynqmp.h | 4 +++-
13
1 file changed, 2 insertions(+), 2 deletions(-)
13
hw/arm/xlnx-zynqmp.c | 25 +++++++++++++++++++++++--
14
2 files changed, 26 insertions(+), 3 deletions(-)
14
15
15
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
16
diff --git a/include/hw/arm/xlnx-zynqmp.h b/include/hw/arm/xlnx-zynqmp.h
16
index XXXXXXX..XXXXXXX 100644
17
index XXXXXXX..XXXXXXX 100644
17
--- a/target/arm/translate-a64.c
18
--- a/include/hw/arm/xlnx-zynqmp.h
18
+++ b/target/arm/translate-a64.c
19
+++ b/include/hw/arm/xlnx-zynqmp.h
19
@@ -XXX,XX +XXX,XX @@ static void disas_simd_three_reg_same_fp16(DisasContext *s, uint32_t insn)
20
@@ -XXX,XX +XXX,XX @@
20
gen_helper_advsimd_acgt_f16(tcg_res, tcg_op1, tcg_op2, fpst);
21
#include "hw/nvram/xlnx-bbram.h"
21
break;
22
#include "hw/nvram/xlnx-zynqmp-efuse.h"
22
default:
23
#include "hw/or-irq.h"
23
- fprintf(stderr, "%s: insn %#04x, fpop %#2x @ %#" PRIx64 "\n",
24
+#include "hw/misc/xlnx-zynqmp-apu-ctrl.h"
24
+ fprintf(stderr, "%s: insn 0x%04x, fpop 0x%2x @ 0x%" PRIx64 "\n",
25
#include "hw/misc/xlnx-zynqmp-crf.h"
25
__func__, insn, fpopcode, s->pc_curr);
26
26
g_assert_not_reached();
27
#define TYPE_XLNX_ZYNQMP "xlnx-zynqmp"
27
}
28
@@ -XXX,XX +XXX,XX @@ OBJECT_DECLARE_SIMPLE_TYPE(XlnxZynqMPState, XLNX_ZYNQMP)
28
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc_fp16(DisasContext *s, uint32_t insn)
29
/*
29
case 0x7f: /* FSQRT (vector) */
30
* Unimplemented mmio regions needed to boot some images.
30
break;
31
*/
31
default:
32
-#define XLNX_ZYNQMP_NUM_UNIMP_AREAS 2
32
- fprintf(stderr, "%s: insn %#04x fpop %#2x\n", __func__, insn, fpop);
33
+#define XLNX_ZYNQMP_NUM_UNIMP_AREAS 1
33
+ fprintf(stderr, "%s: insn 0x%04x fpop 0x%2x\n", __func__, insn, fpop);
34
34
g_assert_not_reached();
35
struct XlnxZynqMPState {
35
}
36
/*< private >*/
37
@@ -XXX,XX +XXX,XX @@ struct XlnxZynqMPState {
38
XlnxZDMA adma[XLNX_ZYNQMP_NUM_ADMA_CH];
39
XlnxCSUDMA qspi_dma;
40
qemu_or_irq qspi_irq_orgate;
41
+ XlnxZynqMPAPUCtrl apu_ctrl;
42
XlnxZynqMPCRF crf;
43
44
char *boot_cpu;
45
diff --git a/hw/arm/xlnx-zynqmp.c b/hw/arm/xlnx-zynqmp.c
46
index XXXXXXX..XXXXXXX 100644
47
--- a/hw/arm/xlnx-zynqmp.c
48
+++ b/hw/arm/xlnx-zynqmp.c
49
@@ -XXX,XX +XXX,XX @@
50
#define DPDMA_IRQ 116
51
52
#define APU_ADDR 0xfd5c0000
53
-#define APU_SIZE 0x100
54
+#define APU_IRQ 153
55
56
#define IPI_ADDR 0xFF300000
57
#define IPI_IRQ 64
58
@@ -XXX,XX +XXX,XX @@ static void xlnx_zynqmp_create_efuse(XlnxZynqMPState *s, qemu_irq *gic)
59
sysbus_connect_irq(sbd, 0, gic[EFUSE_IRQ]);
60
}
61
62
+static void xlnx_zynqmp_create_apu_ctrl(XlnxZynqMPState *s, qemu_irq *gic)
63
+{
64
+ SysBusDevice *sbd;
65
+ int i;
66
+
67
+ object_initialize_child(OBJECT(s), "apu-ctrl", &s->apu_ctrl,
68
+ TYPE_XLNX_ZYNQMP_APU_CTRL);
69
+ sbd = SYS_BUS_DEVICE(&s->apu_ctrl);
70
+
71
+ for (i = 0; i < XLNX_ZYNQMP_NUM_APU_CPUS; i++) {
72
+ g_autofree gchar *name = g_strdup_printf("cpu%d", i);
73
+
74
+ object_property_set_link(OBJECT(&s->apu_ctrl), name,
75
+ OBJECT(&s->apu_cpu[i]), &error_abort);
76
+ }
77
+
78
+ sysbus_realize(sbd, &error_fatal);
79
+ sysbus_mmio_map(sbd, 0, APU_ADDR);
80
+ sysbus_connect_irq(sbd, 0, gic[APU_IRQ]);
81
+}
82
+
83
static void xlnx_zynqmp_create_crf(XlnxZynqMPState *s, qemu_irq *gic)
84
{
85
SysBusDevice *sbd;
86
@@ -XXX,XX +XXX,XX @@ static void xlnx_zynqmp_create_unimp_mmio(XlnxZynqMPState *s)
87
hwaddr base;
88
hwaddr size;
89
} unimp_areas[ARRAY_SIZE(s->mr_unimp)] = {
90
- { .name = "apu", APU_ADDR, APU_SIZE },
91
{ .name = "serdes", SERDES_ADDR, SERDES_SIZE },
92
};
93
unsigned int nr;
94
@@ -XXX,XX +XXX,XX @@ static void xlnx_zynqmp_realize(DeviceState *dev, Error **errp)
95
96
xlnx_zynqmp_create_bbram(s, gic_spi);
97
xlnx_zynqmp_create_efuse(s, gic_spi);
98
+ xlnx_zynqmp_create_apu_ctrl(s, gic_spi);
99
xlnx_zynqmp_create_crf(s, gic_spi);
100
xlnx_zynqmp_create_unimp_mmio(s);
36
101
37
--
102
--
38
2.20.1
103
2.25.1
39
104
40
105
diff view generated by jsdifflib
1
From: Philippe Mathieu-Daudé <philmd@redhat.com>
1
From: Andrew Deason <adeason@sinenomine.net>
2
2
3
When using a Cortex-A15, the Virt machine does not use any
3
On older Solaris releases (before Solaris 11), we didn't get a
4
MPCore peripherals. Remove the dependency.
4
prototype for madvise, and so util/osdep.c provides its own prototype.
5
Some time between the public Solaris 11.4 release and Solaris 11.4.42
6
CBE, we started getting an madvise prototype that looks like this:
5
7
6
Fixes: 7951c7b7c05 ("hw/arm: Express dependencies of the virt machine with Kconfig")
8
extern int madvise(void *, size_t, int);
7
Reported-by: Miroslav Rezanina <mrezanin@redhat.com>
9
8
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
10
which conflicts with the prototype in util/osdeps.c. Instead of always
9
Message-id: 20201107114852.271922-1-philmd@redhat.com
11
declaring this prototype, check if we're missing the madvise()
12
prototype, and only declare it ourselves if the prototype is missing.
13
Move the prototype to include/qemu/osdep.h, the normal place to handle
14
platform-specific header quirks.
15
16
The 'missing_madvise_proto' meson check contains an obviously wrong
17
prototype for madvise. So if that code compiles and links, we must be
18
missing the actual prototype for madvise.
19
20
Signed-off-by: Andrew Deason <adeason@sinenomine.net>
21
Message-id: 20220316035227.3702-2-adeason@sinenomine.net
10
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
22
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
11
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
23
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
12
---
24
---
13
hw/arm/Kconfig | 1 -
25
meson.build | 23 +++++++++++++++++++++--
14
1 file changed, 1 deletion(-)
26
include/qemu/osdep.h | 8 ++++++++
27
util/osdep.c | 3 ---
28
3 files changed, 29 insertions(+), 5 deletions(-)
15
29
16
diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig
30
diff --git a/meson.build b/meson.build
17
index XXXXXXX..XXXXXXX 100644
31
index XXXXXXX..XXXXXXX 100644
18
--- a/hw/arm/Kconfig
32
--- a/meson.build
19
+++ b/hw/arm/Kconfig
33
+++ b/meson.build
20
@@ -XXX,XX +XXX,XX @@ config ARM_VIRT
34
@@ -XXX,XX +XXX,XX @@ config_host_data.set('CONFIG_FDATASYNC', cc.links(gnu_source_prefix + '''
21
imply VFIO_PLATFORM
35
#error Not supported
22
imply VFIO_XGMAC
36
#endif
23
imply TPM_TIS_SYSBUS
37
}'''))
24
- select A15MPCORE
38
-config_host_data.set('CONFIG_MADVISE', cc.links(gnu_source_prefix + '''
25
select ACPI
39
+
26
select ARM_SMMUV3
40
+has_madvise = cc.links(gnu_source_prefix + '''
27
select GPIO_KEY
41
#include <sys/types.h>
42
#include <sys/mman.h>
43
#include <stddef.h>
44
- int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }'''))
45
+ int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }''')
46
+missing_madvise_proto = false
47
+if has_madvise
48
+ # Some platforms (illumos and Solaris before Solaris 11) provide madvise()
49
+ # but forget to prototype it. In this case, has_madvise will be true (the
50
+ # test program links despite a compile warning). To detect the
51
+ # missing-prototype case, we try again with a definitely-bogus prototype.
52
+ # This will only compile if the system headers don't provide the prototype;
53
+ # otherwise the conflicting prototypes will cause a compiler error.
54
+ missing_madvise_proto = cc.links(gnu_source_prefix + '''
55
+ #include <sys/types.h>
56
+ #include <sys/mman.h>
57
+ #include <stddef.h>
58
+ extern int madvise(int);
59
+ int main(void) { return madvise(0); }''')
60
+endif
61
+config_host_data.set('CONFIG_MADVISE', has_madvise)
62
+config_host_data.set('HAVE_MADVISE_WITHOUT_PROTOTYPE', missing_madvise_proto)
63
+
64
config_host_data.set('CONFIG_MEMFD', cc.links(gnu_source_prefix + '''
65
#include <sys/mman.h>
66
int main(void) { return memfd_create("foo", MFD_ALLOW_SEALING); }'''))
67
diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h
68
index XXXXXXX..XXXXXXX 100644
69
--- a/include/qemu/osdep.h
70
+++ b/include/qemu/osdep.h
71
@@ -XXX,XX +XXX,XX @@ void qemu_anon_ram_free(void *ptr, size_t size);
72
#define SIGIO SIGPOLL
73
#endif
74
75
+#ifdef HAVE_MADVISE_WITHOUT_PROTOTYPE
76
+/*
77
+ * See MySQL bug #7156 (http://bugs.mysql.com/bug.php?id=7156) for discussion
78
+ * about Solaris missing the madvise() prototype.
79
+ */
80
+extern int madvise(char *, size_t, int);
81
+#endif
82
+
83
#if defined(CONFIG_LINUX)
84
#ifndef BUS_MCEERR_AR
85
#define BUS_MCEERR_AR 4
86
diff --git a/util/osdep.c b/util/osdep.c
87
index XXXXXXX..XXXXXXX 100644
88
--- a/util/osdep.c
89
+++ b/util/osdep.c
90
@@ -XXX,XX +XXX,XX @@
91
92
#ifdef CONFIG_SOLARIS
93
#include <sys/statvfs.h>
94
-/* See MySQL bug #7156 (http://bugs.mysql.com/bug.php?id=7156) for
95
- discussion about Solaris header problems */
96
-extern int madvise(char *, size_t, int);
97
#endif
98
99
#include "qemu-common.h"
28
--
100
--
29
2.20.1
101
2.25.1
30
31
diff view generated by jsdifflib
New patch
1
From: Andrew Deason <adeason@sinenomine.net>
1
2
3
On Solaris, 'sun' is #define'd to 1, which causes errors if a variable
4
is named 'sun'. Slightly change the name of the var for the Slot User
5
Number so we can build on Solaris.
6
7
Reviewed-by: Ani Sinha <ani@anisinha.ca>
8
Signed-off-by: Andrew Deason <adeason@sinenomine.net>
9
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
10
Message-id: 20220316035227.3702-3-adeason@sinenomine.net
11
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
12
---
13
hw/i386/acpi-build.c | 4 ++--
14
1 file changed, 2 insertions(+), 2 deletions(-)
15
16
diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
17
index XXXXXXX..XXXXXXX 100644
18
--- a/hw/i386/acpi-build.c
19
+++ b/hw/i386/acpi-build.c
20
@@ -XXX,XX +XXX,XX @@ Aml *aml_pci_device_dsm(void)
21
Aml *bnum = aml_arg(4);
22
Aml *func = aml_arg(2);
23
Aml *rev = aml_arg(1);
24
- Aml *sun = aml_arg(5);
25
+ Aml *sunum = aml_arg(5);
26
27
method = aml_method("PDSM", 6, AML_SERIALIZED);
28
29
@@ -XXX,XX +XXX,XX @@ Aml *aml_pci_device_dsm(void)
30
UUID = aml_touuid("E5C937D0-3553-4D7A-9117-EA4D19C3434D");
31
ifctx = aml_if(aml_equal(aml_arg(0), UUID));
32
{
33
- aml_append(ifctx, aml_store(aml_call2("AIDX", bnum, sun), acpi_index));
34
+ aml_append(ifctx, aml_store(aml_call2("AIDX", bnum, sunum), acpi_index));
35
ifctx1 = aml_if(aml_equal(func, zero));
36
{
37
uint8_t byte_list[1];
38
--
39
2.25.1
diff view generated by jsdifflib
New patch
1
From: Andrew Deason <adeason@sinenomine.net>
1
2
3
The include for statvfs.h has not been needed since all statvfs calls
4
were removed in commit 4a1418e07bdc ("Unbreak large mem support by
5
removing kqemu").
6
7
The comment mentioning CONFIG_BSD hasn't made sense since an include
8
for config-host.h was removed in commit aafd75841001 ("util: Clean up
9
includes").
10
11
Remove this cruft.
12
13
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
14
Signed-off-by: Andrew Deason <adeason@sinenomine.net>
15
Message-id: 20220316035227.3702-4-adeason@sinenomine.net
16
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
17
---
18
util/osdep.c | 7 -------
19
1 file changed, 7 deletions(-)
20
21
diff --git a/util/osdep.c b/util/osdep.c
22
index XXXXXXX..XXXXXXX 100644
23
--- a/util/osdep.c
24
+++ b/util/osdep.c
25
@@ -XXX,XX +XXX,XX @@
26
*/
27
#include "qemu/osdep.h"
28
#include "qapi/error.h"
29
-
30
-/* Needed early for CONFIG_BSD etc. */
31
-
32
-#ifdef CONFIG_SOLARIS
33
-#include <sys/statvfs.h>
34
-#endif
35
-
36
#include "qemu-common.h"
37
#include "qemu/cutils.h"
38
#include "qemu/sockets.h"
39
--
40
2.25.1
diff view generated by jsdifflib