1
Handful of bugfixes for rc2. None of these are particularly critical
1
v1->v2 changes: dropped the patch adding the new ast2600
2
or exciting.
2
board, as it doesn't pass "make check" on 32-bit hosts or
3
3
low-memory hosts.
4
5
thanks
4
-- PMM
6
-- PMM
5
7
6
The following changes since commit 45a150aa2b3492acf6691c7bdbeb25a8545d8345:
8
The following changes since commit 3af78db68176a049e2570822f64604e0692c1447:
7
9
8
Merge remote-tracking branch 'remotes/ericb/tags/pull-bitmaps-2020-08-03' into staging (2020-08-03 15:13:49 +0100)
10
Merge remote-tracking branch 'remotes/kevin/tags/for-upstream' into staging (2019-10-15 13:25:05 +0100)
9
11
10
are available in the Git repository at:
12
are available in the Git repository at:
11
13
12
https://git.linaro.org/people/pmaydell/qemu-arm.git tags/pull-target-arm-20200803
14
https://git.linaro.org/people/pmaydell/qemu-arm.git tags/pull-target-arm-20191015
13
15
14
for you to fetch changes up to 13557fd392890cbd985bceba7f717e01efd674b8:
16
for you to fetch changes up to 19845504da1bdee4be7d0fba33da5be9efa4c11b:
15
17
16
hw/timer/imx_epit: Avoid assertion when CR.SWR is written (2020-08-03 17:56:11 +0100)
18
hw/misc/bcm2835_mbox: Add trace events (2019-10-15 18:09:05 +0100)
17
19
18
----------------------------------------------------------------
20
----------------------------------------------------------------
19
target-arm queue:
21
target-arm queue:
20
* hw/timer/imx_epit: Avoid assertion when CR.SWR is written
22
* Add Aspeed AST2600 SoC support (but no new board model yet)
21
* netduino2, netduinoplus2, microbit: set system_clock_scale so that
23
* aspeed/wdt: Check correct register for clock source
22
SysTick running on the CPU clock works
24
* bcm2835: code cleanups, better logging, trace events
23
* target/arm: Avoid maybe-uninitialized warning with gcc 4.9
25
* implement v2.0 of the Arm semihosting specification
24
* target/arm: Fix AddPAC error indication
26
* provide new 'transaction-based' ptimer API and use it
25
* Make AIRCR.SYSRESETREQ actually reset the system for the
27
for the Arm devices that use ptimers
26
microbit, mps2-*, musca-*, netduino* boards
28
* ARM: KVM: support more than 256 CPUs
27
29
28
----------------------------------------------------------------
30
----------------------------------------------------------------
29
Kaige Li (1):
31
Amithash Prasad (1):
30
target/arm: Avoid maybe-uninitialized warning with gcc 4.9
32
aspeed/wdt: Check correct register for clock source
31
33
32
Peter Maydell (6):
34
Cédric Le Goater (14):
33
hw/arm/netduino2, netduinoplus2: Set system_clock_scale
35
aspeed/timer: Introduce an object class per SoC
34
include/hw/irq.h: New function qemu_irq_is_connected()
36
aspeed/timer: Add support for control register 3
35
hw/intc/armv7m_nvic: Provide default "reset the system" behaviour for SYSRESETREQ
37
aspeed/timer: Add AST2600 support
36
msf2-soc, stellaris: Don't wire up SYSRESETREQ
38
aspeed/timer: Add support for IRQ status register on the AST2600
37
hw/arm/nrf51_soc: Set system_clock_scale
39
aspeed/sdmc: Introduce an object class per SoC
38
hw/timer/imx_epit: Avoid assertion when CR.SWR is written
40
watchdog/aspeed: Introduce an object class per SoC
39
41
aspeed/smc: Introduce segment operations
40
Richard Henderson (1):
42
aspeed/smc: Add AST2600 support
41
target/arm: Fix AddPAC error indication
43
aspeed/i2c: Introduce an object class per SoC
42
44
aspeed/i2c: Add AST2600 support
43
include/hw/arm/armv7m.h | 4 +++-
45
aspeed: Introduce an object class per SoC
44
include/hw/irq.h | 18 ++++++++++++++++++
46
aspeed/soc: Add AST2600 support
45
hw/arm/msf2-soc.c | 11 -----------
47
m25p80: Add support for w25q512jv
46
hw/arm/netduino2.c | 10 ++++++++++
48
aspeed: add support for the Aspeed MII controller of the AST2600
47
hw/arm/netduinoplus2.c | 10 ++++++++++
49
48
hw/arm/nrf51_soc.c | 5 +++++
50
Eddie James (1):
49
hw/arm/stellaris.c | 12 ------------
51
hw/sd/aspeed_sdhci: New device
50
hw/intc/armv7m_nvic.c | 17 ++++++++++++++++-
52
51
hw/timer/imx_epit.c | 13 ++++++++++---
53
Eric Auger (3):
52
target/arm/pauth_helper.c | 6 +++++-
54
linux headers: update against v5.4-rc1
53
target/arm/translate-a64.c | 2 +-
55
intc/arm_gic: Support IRQ injection for more than 256 vpus
54
tests/tcg/aarch64/pauth-5.c | 33 +++++++++++++++++++++++++++++++++
56
ARM: KVM: Check KVM_CAP_ARM_IRQ_LINE_LAYOUT_2 for smp_cpus > 256
55
tests/tcg/aarch64/Makefile.target | 2 +-
57
56
13 files changed, 112 insertions(+), 31 deletions(-)
58
Joel Stanley (5):
57
create mode 100644 tests/tcg/aarch64/pauth-5.c
59
hw: aspeed_scu: Add AST2600 support
58
60
aspeed/sdmc: Add AST2600 support
61
hw: wdt_aspeed: Add AST2600 support
62
aspeed: Parameterise number of MACs
63
aspeed/soc: Add ASPEED Video stub
64
65
Peter Maydell (36):
66
ptimer: Rename ptimer_init() to ptimer_init_with_bh()
67
ptimer: Provide new transaction-based API
68
tests/ptimer-test: Switch to transaction-based ptimer API
69
hw/timer/arm_timer.c: Switch to transaction-based ptimer API
70
hw/arm/musicpal.c: Switch to transaction-based ptimer API
71
hw/timer/allwinner-a10-pit.c: Switch to transaction-based ptimer API
72
hw/timer/arm_mptimer.c: Switch to transaction-based ptimer API
73
hw/timer/cmsdk-apb-dualtimer.c: Switch to transaction-based ptimer API
74
hw/timer/cmsdk-apb-timer.c: Switch to transaction-based ptimer API
75
hw/timer/digic-timer.c: Switch to transaction-based ptimer API
76
hw/timer/exynos4210_mct.c: Switch GFRC to transaction-based ptimer API
77
hw/timer/exynos4210_mct.c: Switch LFRC to transaction-based ptimer API
78
hw/timer/exynos4210_mct.c: Switch ltick to transaction-based ptimer API
79
hw/timer/exynos4210_pwm.c: Switch to transaction-based ptimer API
80
hw/timer/exynos4210_rtc.c: Switch 1Hz ptimer to transaction-based API
81
hw/timer/exynos4210_rtc.c: Switch main ptimer to transaction-based API
82
hw/timer/imx_epit.c: Switch to transaction-based ptimer API
83
hw/timer/imx_gpt.c: Switch to transaction-based ptimer API
84
hw/timer/mss-timerc: Switch to transaction-based ptimer API
85
hw/watchdog/cmsdk-apb-watchdog.c: Switch to transaction-based ptimer API
86
hw/net/lan9118.c: Switch to transaction-based ptimer API
87
target/arm/arm-semi: Capture errno in softmmu version of set_swi_errno()
88
target/arm/arm-semi: Always set some kind of errno for failed calls
89
target/arm/arm-semi: Correct comment about gdb syscall races
90
target/arm/arm-semi: Make semihosting code hand out its own file descriptors
91
target/arm/arm-semi: Restrict use of TaskState*
92
target/arm/arm-semi: Use set_swi_errno() in gdbstub callback functions
93
target/arm/arm-semi: Factor out implementation of SYS_CLOSE
94
target/arm/arm-semi: Factor out implementation of SYS_WRITE
95
target/arm/arm-semi: Factor out implementation of SYS_READ
96
target/arm/arm-semi: Factor out implementation of SYS_ISTTY
97
target/arm/arm-semi: Factor out implementation of SYS_SEEK
98
target/arm/arm-semi: Factor out implementation of SYS_FLEN
99
target/arm/arm-semi: Implement support for semihosting feature detection
100
target/arm/arm-semi: Implement SH_EXT_EXIT_EXTENDED extension
101
target/arm/arm-semi: Implement SH_EXT_STDOUT_STDERR extension
102
103
Philippe Mathieu-Daudé (6):
104
hw/arm/raspi: Use the IEC binary prefix definitions
105
hw/arm/bcm2835_peripherals: Improve logging
106
hw/arm/bcm2835_peripherals: Name various address spaces
107
hw/arm/bcm2835: Rename some definitions
108
hw/arm/bcm2835: Add various unimplemented peripherals
109
hw/misc/bcm2835_mbox: Add trace events
110
111
Rashmica Gupta (1):
112
hw/gpio: Add in AST2600 specific implementation
113
114
hw/arm/Makefile.objs | 2 +-
115
hw/sd/Makefile.objs | 1 +
116
include/hw/arm/aspeed_soc.h | 29 +-
117
include/hw/arm/bcm2835_peripherals.h | 15 +
118
include/hw/arm/raspi_platform.h | 24 +-
119
include/hw/i2c/aspeed_i2c.h | 20 +-
120
include/hw/misc/aspeed_scu.h | 7 +-
121
include/hw/misc/aspeed_sdmc.h | 20 +-
122
include/hw/net/ftgmac100.h | 17 +
123
include/hw/ptimer.h | 83 ++-
124
include/hw/sd/aspeed_sdhci.h | 34 ++
125
include/hw/ssi/aspeed_smc.h | 4 +
126
include/hw/timer/aspeed_timer.h | 18 +
127
include/hw/timer/mss-timer.h | 1 -
128
include/hw/watchdog/wdt_aspeed.h | 19 +-
129
include/standard-headers/asm-x86/bootparam.h | 2 +
130
include/standard-headers/asm-x86/kvm_para.h | 1 +
131
include/standard-headers/linux/ethtool.h | 24 +
132
include/standard-headers/linux/pci_regs.h | 19 +-
133
include/standard-headers/linux/virtio_fs.h | 19 +
134
include/standard-headers/linux/virtio_ids.h | 2 +
135
include/standard-headers/linux/virtio_iommu.h | 165 ++++++
136
include/standard-headers/linux/virtio_pmem.h | 6 +-
137
linux-headers/asm-arm/kvm.h | 16 +-
138
linux-headers/asm-arm/unistd-common.h | 2 +
139
linux-headers/asm-arm64/kvm.h | 21 +-
140
linux-headers/asm-generic/mman-common.h | 18 +-
141
linux-headers/asm-generic/mman.h | 10 +-
142
linux-headers/asm-generic/unistd.h | 10 +-
143
linux-headers/asm-mips/mman.h | 3 +
144
linux-headers/asm-mips/unistd_n32.h | 1 +
145
linux-headers/asm-mips/unistd_n64.h | 1 +
146
linux-headers/asm-mips/unistd_o32.h | 1 +
147
linux-headers/asm-powerpc/mman.h | 6 +-
148
linux-headers/asm-powerpc/unistd_32.h | 2 +
149
linux-headers/asm-powerpc/unistd_64.h | 2 +
150
linux-headers/asm-s390/kvm.h | 6 +
151
linux-headers/asm-s390/unistd_32.h | 2 +
152
linux-headers/asm-s390/unistd_64.h | 2 +
153
linux-headers/asm-x86/kvm.h | 28 +-
154
linux-headers/asm-x86/unistd.h | 2 +-
155
linux-headers/asm-x86/unistd_32.h | 2 +
156
linux-headers/asm-x86/unistd_64.h | 2 +
157
linux-headers/asm-x86/unistd_x32.h | 2 +
158
linux-headers/linux/kvm.h | 12 +-
159
linux-headers/linux/psp-sev.h | 5 +-
160
linux-headers/linux/vfio.h | 71 ++-
161
target/arm/kvm_arm.h | 1 +
162
hw/arm/aspeed.c | 19 +-
163
hw/arm/aspeed_ast2600.c | 523 +++++++++++++++++++
164
hw/arm/aspeed_soc.c | 199 +++++---
165
hw/arm/bcm2835_peripherals.c | 38 +-
166
hw/arm/bcm2836.c | 2 +-
167
hw/arm/musicpal.c | 16 +-
168
hw/arm/raspi.c | 4 +-
169
hw/block/m25p80.c | 1 +
170
hw/char/bcm2835_aux.c | 5 +-
171
hw/core/ptimer.c | 154 +++++-
172
hw/display/bcm2835_fb.c | 2 +-
173
hw/dma/bcm2835_dma.c | 10 +-
174
hw/dma/xilinx_axidma.c | 2 +-
175
hw/gpio/aspeed_gpio.c | 142 +++++-
176
hw/i2c/aspeed_i2c.c | 106 +++-
177
hw/intc/arm_gic_kvm.c | 7 +-
178
hw/intc/bcm2836_control.c | 7 +-
179
hw/m68k/mcf5206.c | 2 +-
180
hw/m68k/mcf5208.c | 2 +-
181
hw/misc/aspeed_scu.c | 194 ++++++-
182
hw/misc/aspeed_sdmc.c | 250 ++++++---
183
hw/misc/bcm2835_mbox.c | 14 +-
184
hw/misc/bcm2835_property.c | 20 +-
185
hw/net/fsl_etsec/etsec.c | 2 +-
186
hw/net/ftgmac100.c | 162 ++++++
187
hw/net/lan9118.c | 11 +-
188
hw/sd/aspeed_sdhci.c | 198 ++++++++
189
hw/ssi/aspeed_smc.c | 177 ++++++-
190
hw/timer/allwinner-a10-pit.c | 12 +-
191
hw/timer/altera_timer.c | 2 +-
192
hw/timer/arm_mptimer.c | 18 +-
193
hw/timer/arm_timer.c | 16 +-
194
hw/timer/aspeed_timer.c | 213 +++++++-
195
hw/timer/cmsdk-apb-dualtimer.c | 14 +-
196
hw/timer/cmsdk-apb-timer.c | 15 +-
197
hw/timer/digic-timer.c | 16 +-
198
hw/timer/etraxfs_timer.c | 6 +-
199
hw/timer/exynos4210_mct.c | 107 +++-
200
hw/timer/exynos4210_pwm.c | 17 +-
201
hw/timer/exynos4210_rtc.c | 22 +-
202
hw/timer/grlib_gptimer.c | 2 +-
203
hw/timer/imx_epit.c | 32 +-
204
hw/timer/imx_gpt.c | 21 +-
205
hw/timer/lm32_timer.c | 2 +-
206
hw/timer/milkymist-sysctl.c | 4 +-
207
hw/timer/mss-timer.c | 11 +-
208
hw/timer/puv3_ost.c | 2 +-
209
hw/timer/sh_timer.c | 2 +-
210
hw/timer/slavio_timer.c | 2 +-
211
hw/timer/xilinx_timer.c | 2 +-
212
hw/watchdog/cmsdk-apb-watchdog.c | 13 +-
213
hw/watchdog/wdt_aspeed.c | 153 +++---
214
target/arm/arm-semi.c | 707 +++++++++++++++++++++-----
215
target/arm/cpu.c | 10 +-
216
target/arm/kvm.c | 22 +-
217
tests/ptimer-test.c | 106 +++-
218
hw/misc/trace-events | 6 +
219
105 files changed, 3934 insertions(+), 650 deletions(-)
220
create mode 100644 include/hw/sd/aspeed_sdhci.h
221
create mode 100644 include/standard-headers/linux/virtio_fs.h
222
create mode 100644 include/standard-headers/linux/virtio_iommu.h
223
create mode 100644 hw/arm/aspeed_ast2600.c
224
create mode 100644 hw/sd/aspeed_sdhci.c
225
diff view generated by jsdifflib
Deleted patch
1
The netduino2 and netduinoplus2 boards forgot to set the system_clock_scale
2
global, which meant that if guest code used the systick timer in "use
3
the processor clock" mode it would hang because time never advances.
4
1
5
Set the global to match the documented CPU clock speed of these boards.
6
Judging by the data sheet this is slightly simplistic because the
7
SoC allows configuration of the SYSCLK source and frequency via the
8
RCC (reset and clock control) module, but we don't model that.
9
10
Fixes: https://bugs.launchpad.net/qemu/+bug/1876187
11
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
12
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
13
Message-id: 20200727162617.26227-1-peter.maydell@linaro.org
14
---
15
hw/arm/netduino2.c | 10 ++++++++++
16
hw/arm/netduinoplus2.c | 10 ++++++++++
17
2 files changed, 20 insertions(+)
18
19
diff --git a/hw/arm/netduino2.c b/hw/arm/netduino2.c
20
index XXXXXXX..XXXXXXX 100644
21
--- a/hw/arm/netduino2.c
22
+++ b/hw/arm/netduino2.c
23
@@ -XXX,XX +XXX,XX @@
24
#include "hw/arm/stm32f205_soc.h"
25
#include "hw/arm/boot.h"
26
27
+/* Main SYSCLK frequency in Hz (120MHz) */
28
+#define SYSCLK_FRQ 120000000ULL
29
+
30
static void netduino2_init(MachineState *machine)
31
{
32
DeviceState *dev;
33
34
+ /*
35
+ * TODO: ideally we would model the SoC RCC and let it handle
36
+ * system_clock_scale, including its ability to define different
37
+ * possible SYSCLK sources.
38
+ */
39
+ system_clock_scale = NANOSECONDS_PER_SECOND / SYSCLK_FRQ;
40
+
41
dev = qdev_new(TYPE_STM32F205_SOC);
42
qdev_prop_set_string(dev, "cpu-type", ARM_CPU_TYPE_NAME("cortex-m3"));
43
sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
44
diff --git a/hw/arm/netduinoplus2.c b/hw/arm/netduinoplus2.c
45
index XXXXXXX..XXXXXXX 100644
46
--- a/hw/arm/netduinoplus2.c
47
+++ b/hw/arm/netduinoplus2.c
48
@@ -XXX,XX +XXX,XX @@
49
#include "hw/arm/stm32f405_soc.h"
50
#include "hw/arm/boot.h"
51
52
+/* Main SYSCLK frequency in Hz (168MHz) */
53
+#define SYSCLK_FRQ 168000000ULL
54
+
55
static void netduinoplus2_init(MachineState *machine)
56
{
57
DeviceState *dev;
58
59
+ /*
60
+ * TODO: ideally we would model the SoC RCC and let it handle
61
+ * system_clock_scale, including its ability to define different
62
+ * possible SYSCLK sources.
63
+ */
64
+ system_clock_scale = NANOSECONDS_PER_SECOND / SYSCLK_FRQ;
65
+
66
dev = qdev_new(TYPE_STM32F405_SOC);
67
qdev_prop_set_string(dev, "cpu-type", ARM_CPU_TYPE_NAME("cortex-m4"));
68
sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
69
--
70
2.20.1
71
72
diff view generated by jsdifflib
Deleted patch
1
Mostly devices don't need to care whether one of their output
2
qemu_irq lines is connected, because functions like qemu_set_irq()
3
silently do nothing if there is nothing on the other end. However
4
sometimes a device might want to implement default behaviour for the
5
case where the machine hasn't wired the line up to anywhere.
6
1
7
Provide a function qemu_irq_is_connected() that devices can use for
8
this purpose. (The test is trivial but encapsulating it in a
9
function makes it easier to see where we're doing it in case we need
10
to change the implementation later.)
11
12
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
13
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
14
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
15
Message-id: 20200728103744.6909-2-peter.maydell@linaro.org
16
---
17
include/hw/irq.h | 18 ++++++++++++++++++
18
1 file changed, 18 insertions(+)
19
20
diff --git a/include/hw/irq.h b/include/hw/irq.h
21
index XXXXXXX..XXXXXXX 100644
22
--- a/include/hw/irq.h
23
+++ b/include/hw/irq.h
24
@@ -XXX,XX +XXX,XX @@ qemu_irq qemu_irq_split(qemu_irq irq1, qemu_irq irq2);
25
on an existing vector of qemu_irq. */
26
void qemu_irq_intercept_in(qemu_irq *gpio_in, qemu_irq_handler handler, int n);
27
28
+/**
29
+ * qemu_irq_is_connected: Return true if IRQ line is wired up
30
+ *
31
+ * If a qemu_irq has a device on the other (receiving) end of it,
32
+ * return true; otherwise return false.
33
+ *
34
+ * Usually device models don't need to care whether the machine model
35
+ * has wired up their outbound qemu_irq lines, because functions like
36
+ * qemu_set_irq() silently do nothing if there is nothing on the other
37
+ * end of the line. However occasionally a device model will want to
38
+ * provide default behaviour if its output is left floating, and
39
+ * it can use this function to identify when that is the case.
40
+ */
41
+static inline bool qemu_irq_is_connected(qemu_irq irq)
42
+{
43
+ return irq != NULL;
44
+}
45
+
46
#endif
47
--
48
2.20.1
49
50
diff view generated by jsdifflib
Deleted patch
1
The NVIC provides an outbound qemu_irq "SYSRESETREQ" which it signals
2
when the guest sets the SYSRESETREQ bit in the AIRCR register. This
3
matches the hardware design (where the CPU has a signal of this name
4
and it is up to the SoC to connect that up to an actual reset
5
mechanism), but in QEMU it mostly results in duplicated code in SoC
6
objects and bugs where SoC model implementors forget to wire up the
7
SYSRESETREQ line.
8
1
9
Provide a default behaviour for the case where SYSRESETREQ is not
10
actually connected to anything: use qemu_system_reset_request() to
11
perform a system reset. This will allow us to remove the
12
implementations of SYSRESETREQ handling from the boards where that's
13
exactly what it does, and also fixes the bugs in the board models
14
which forgot to wire up the signal:
15
16
* microbit
17
* mps2-an385
18
* mps2-an505
19
* mps2-an511
20
* mps2-an521
21
* musca-a
22
* musca-b1
23
* netduino
24
* netduinoplus2
25
26
We still allow the board to wire up the signal if it needs to, in case
27
we need to model more complicated reset controller logic or to model
28
buggy SoC hardware which forgot to wire up the line itself. But
29
defaulting to "reset the system" is more often going to be correct
30
than defaulting to "do nothing".
31
32
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
33
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
34
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
35
Message-id: 20200728103744.6909-3-peter.maydell@linaro.org
36
---
37
include/hw/arm/armv7m.h | 4 +++-
38
hw/intc/armv7m_nvic.c | 17 ++++++++++++++++-
39
2 files changed, 19 insertions(+), 2 deletions(-)
40
41
diff --git a/include/hw/arm/armv7m.h b/include/hw/arm/armv7m.h
42
index XXXXXXX..XXXXXXX 100644
43
--- a/include/hw/arm/armv7m.h
44
+++ b/include/hw/arm/armv7m.h
45
@@ -XXX,XX +XXX,XX @@ typedef struct {
46
47
/* ARMv7M container object.
48
* + Unnamed GPIO input lines: external IRQ lines for the NVIC
49
- * + Named GPIO output SYSRESETREQ: signalled for guest AIRCR.SYSRESETREQ
50
+ * + Named GPIO output SYSRESETREQ: signalled for guest AIRCR.SYSRESETREQ.
51
+ * If this GPIO is not wired up then the NVIC will default to performing
52
+ * a qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET).
53
* + Property "cpu-type": CPU type to instantiate
54
* + Property "num-irq": number of external IRQ lines
55
* + Property "memory": MemoryRegion defining the physical address space
56
diff --git a/hw/intc/armv7m_nvic.c b/hw/intc/armv7m_nvic.c
57
index XXXXXXX..XXXXXXX 100644
58
--- a/hw/intc/armv7m_nvic.c
59
+++ b/hw/intc/armv7m_nvic.c
60
@@ -XXX,XX +XXX,XX @@
61
#include "hw/intc/armv7m_nvic.h"
62
#include "hw/irq.h"
63
#include "hw/qdev-properties.h"
64
+#include "sysemu/runstate.h"
65
#include "target/arm/cpu.h"
66
#include "exec/exec-all.h"
67
#include "exec/memop.h"
68
@@ -XXX,XX +XXX,XX @@ static const uint8_t nvic_id[] = {
69
0x00, 0xb0, 0x1b, 0x00, 0x0d, 0xe0, 0x05, 0xb1
70
};
71
72
+static void signal_sysresetreq(NVICState *s)
73
+{
74
+ if (qemu_irq_is_connected(s->sysresetreq)) {
75
+ qemu_irq_pulse(s->sysresetreq);
76
+ } else {
77
+ /*
78
+ * Default behaviour if the SoC doesn't need to wire up
79
+ * SYSRESETREQ (eg to a system reset controller of some kind):
80
+ * perform a system reset via the usual QEMU API.
81
+ */
82
+ qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
83
+ }
84
+}
85
+
86
static int nvic_pending_prio(NVICState *s)
87
{
88
/* return the group priority of the current pending interrupt,
89
@@ -XXX,XX +XXX,XX @@ static void nvic_writel(NVICState *s, uint32_t offset, uint32_t value,
90
if (value & R_V7M_AIRCR_SYSRESETREQ_MASK) {
91
if (attrs.secure ||
92
!(cpu->env.v7m.aircr & R_V7M_AIRCR_SYSRESETREQS_MASK)) {
93
- qemu_irq_pulse(s->sysresetreq);
94
+ signal_sysresetreq(s);
95
}
96
}
97
if (value & R_V7M_AIRCR_VECTCLRACTIVE_MASK) {
98
--
99
2.20.1
100
101
diff view generated by jsdifflib
Deleted patch
1
The MSF2 SoC model and the Stellaris board code both wire
2
SYSRESETREQ up to a function that just invokes
3
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
4
This is now the default action that the NVIC does if the line is
5
not connected, so we can delete the handling code.
6
1
7
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
8
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
9
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
10
Message-id: 20200728103744.6909-4-peter.maydell@linaro.org
11
---
12
hw/arm/msf2-soc.c | 11 -----------
13
hw/arm/stellaris.c | 12 ------------
14
2 files changed, 23 deletions(-)
15
16
diff --git a/hw/arm/msf2-soc.c b/hw/arm/msf2-soc.c
17
index XXXXXXX..XXXXXXX 100644
18
--- a/hw/arm/msf2-soc.c
19
+++ b/hw/arm/msf2-soc.c
20
@@ -XXX,XX +XXX,XX @@
21
#include "hw/irq.h"
22
#include "hw/arm/msf2-soc.h"
23
#include "hw/misc/unimp.h"
24
-#include "sysemu/runstate.h"
25
#include "sysemu/sysemu.h"
26
27
#define MSF2_TIMER_BASE 0x40004000
28
@@ -XXX,XX +XXX,XX @@ static const int spi_irq[MSF2_NUM_SPIS] = { 2, 3 };
29
static const int uart_irq[MSF2_NUM_UARTS] = { 10, 11 };
30
static const int timer_irq[MSF2_NUM_TIMERS] = { 14, 15 };
31
32
-static void do_sys_reset(void *opaque, int n, int level)
33
-{
34
- if (level) {
35
- qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
36
- }
37
-}
38
-
39
static void m2sxxx_soc_initfn(Object *obj)
40
{
41
MSF2State *s = MSF2_SOC(obj);
42
@@ -XXX,XX +XXX,XX @@ static void m2sxxx_soc_realize(DeviceState *dev_soc, Error **errp)
43
return;
44
}
45
46
- qdev_connect_gpio_out_named(DEVICE(&s->armv7m.nvic), "SYSRESETREQ", 0,
47
- qemu_allocate_irq(&do_sys_reset, NULL, 0));
48
-
49
system_clock_scale = NANOSECONDS_PER_SECOND / s->m3clk;
50
51
for (i = 0; i < MSF2_NUM_UARTS; i++) {
52
diff --git a/hw/arm/stellaris.c b/hw/arm/stellaris.c
53
index XXXXXXX..XXXXXXX 100644
54
--- a/hw/arm/stellaris.c
55
+++ b/hw/arm/stellaris.c
56
@@ -XXX,XX +XXX,XX @@
57
#include "hw/boards.h"
58
#include "qemu/log.h"
59
#include "exec/address-spaces.h"
60
-#include "sysemu/runstate.h"
61
#include "sysemu/sysemu.h"
62
#include "hw/arm/armv7m.h"
63
#include "hw/char/pl011.h"
64
@@ -XXX,XX +XXX,XX @@ static void stellaris_adc_init(Object *obj)
65
qdev_init_gpio_in(dev, stellaris_adc_trigger, 1);
66
}
67
68
-static
69
-void do_sys_reset(void *opaque, int n, int level)
70
-{
71
- if (level) {
72
- qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
73
- }
74
-}
75
-
76
/* Board init. */
77
static stellaris_board_info stellaris_boards[] = {
78
{ "LM3S811EVB",
79
@@ -XXX,XX +XXX,XX @@ static void stellaris_init(MachineState *ms, stellaris_board_info *board)
80
/* This will exit with an error if the user passed us a bad cpu_type */
81
sysbus_realize_and_unref(SYS_BUS_DEVICE(nvic), &error_fatal);
82
83
- qdev_connect_gpio_out_named(nvic, "SYSRESETREQ", 0,
84
- qemu_allocate_irq(&do_sys_reset, NULL, 0));
85
-
86
if (board->dc1 & (1 << 16)) {
87
dev = sysbus_create_varargs(TYPE_STELLARIS_ADC, 0x40038000,
88
qdev_get_gpio_in(nvic, 14),
89
--
90
2.20.1
91
92
diff view generated by jsdifflib
Deleted patch
1
From: Richard Henderson <richard.henderson@linaro.org>
2
1
3
The definition of top_bit used in this function is one higher
4
than that used in the Arm ARM psuedo-code, which put the error
5
indication at top_bit - 1 at the wrong place, which meant that
6
it wasn't visible to Auth.
7
8
Fixing the definition of top_bit requires more changes, because
9
its most common use is for the count of bits in top_bit:bot_bit,
10
which would then need to be computed as top_bit - bot_bit + 1.
11
12
For now, prefer the minimal fix to the error indication alone.
13
14
Fixes: 63ff0ca94cb
15
Reported-by: Derrick McKee <derrick.mckee@gmail.com>
16
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
17
Message-id: 20200728195706.11087-1-richard.henderson@linaro.org
18
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
19
[PMM: added comment about the divergence from the pseudocode]
20
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
21
---
22
target/arm/pauth_helper.c | 6 +++++-
23
tests/tcg/aarch64/pauth-5.c | 33 +++++++++++++++++++++++++++++++
24
tests/tcg/aarch64/Makefile.target | 2 +-
25
3 files changed, 39 insertions(+), 2 deletions(-)
26
create mode 100644 tests/tcg/aarch64/pauth-5.c
27
28
diff --git a/target/arm/pauth_helper.c b/target/arm/pauth_helper.c
29
index XXXXXXX..XXXXXXX 100644
30
--- a/target/arm/pauth_helper.c
31
+++ b/target/arm/pauth_helper.c
32
@@ -XXX,XX +XXX,XX @@ static uint64_t pauth_addpac(CPUARMState *env, uint64_t ptr, uint64_t modifier,
33
*/
34
test = sextract64(ptr, bot_bit, top_bit - bot_bit);
35
if (test != 0 && test != -1) {
36
- pac ^= MAKE_64BIT_MASK(top_bit - 1, 1);
37
+ /*
38
+ * Note that our top_bit is one greater than the pseudocode's
39
+ * version, hence "- 2" here.
40
+ */
41
+ pac ^= MAKE_64BIT_MASK(top_bit - 2, 1);
42
}
43
44
/*
45
diff --git a/tests/tcg/aarch64/pauth-5.c b/tests/tcg/aarch64/pauth-5.c
46
new file mode 100644
47
index XXXXXXX..XXXXXXX
48
--- /dev/null
49
+++ b/tests/tcg/aarch64/pauth-5.c
50
@@ -XXX,XX +XXX,XX @@
51
+#include <assert.h>
52
+
53
+static int x;
54
+
55
+int main()
56
+{
57
+ int *p0 = &x, *p1, *p2, *p3;
58
+ unsigned long salt = 0;
59
+
60
+ /*
61
+ * With TBI enabled and a 48-bit VA, there are 7 bits of auth, and so
62
+ * a 1/128 chance of auth = pac(ptr,key,salt) producing zero.
63
+ * Find a salt that creates auth != 0.
64
+ */
65
+ do {
66
+ salt++;
67
+ asm("pacda %0, %1" : "=r"(p1) : "r"(salt), "0"(p0));
68
+ } while (p0 == p1);
69
+
70
+ /*
71
+ * This pac must fail, because the input pointer bears an encryption,
72
+ * and so is not properly extended within bits [55:47]. This will
73
+ * toggle bit 54 in the output...
74
+ */
75
+ asm("pacda %0, %1" : "=r"(p2) : "r"(salt), "0"(p1));
76
+
77
+ /* ... so that the aut must fail, setting bit 53 in the output ... */
78
+ asm("autda %0, %1" : "=r"(p3) : "r"(salt), "0"(p2));
79
+
80
+ /* ... which means this equality must not hold. */
81
+ assert(p3 != p0);
82
+ return 0;
83
+}
84
diff --git a/tests/tcg/aarch64/Makefile.target b/tests/tcg/aarch64/Makefile.target
85
index XXXXXXX..XXXXXXX 100644
86
--- a/tests/tcg/aarch64/Makefile.target
87
+++ b/tests/tcg/aarch64/Makefile.target
88
@@ -XXX,XX +XXX,XX @@ run-fcvt: fcvt
89
90
# Pauth Tests
91
ifneq ($(DOCKER_IMAGE)$(CROSS_CC_HAS_ARMV8_3),)
92
-AARCH64_TESTS += pauth-1 pauth-2 pauth-4
93
+AARCH64_TESTS += pauth-1 pauth-2 pauth-4 pauth-5
94
pauth-%: CFLAGS += -march=armv8.3-a
95
run-pauth-%: QEMU_OPTS += -cpu max
96
run-plugin-pauth-%: QEMU_OPTS += -cpu max
97
--
98
2.20.1
99
100
diff view generated by jsdifflib
Deleted patch
1
From: Kaige Li <likaige@loongson.cn>
2
1
3
GCC version 4.9.4 isn't clever enough to figure out that all
4
execution paths in disas_ldst() that use 'fn' will have initialized
5
it first, and so it warns:
6
7
/home/LiKaige/qemu/target/arm/translate-a64.c: In function ‘disas_ldst’:
8
/home/LiKaige/qemu/target/arm/translate-a64.c:3392:5: error: ‘fn’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
9
fn(cpu_reg(s, rt), clean_addr, tcg_rs, get_mem_index(s),
10
^
11
/home/LiKaige/qemu/target/arm/translate-a64.c:3318:22: note: ‘fn’ was declared here
12
AtomicThreeOpFn *fn;
13
^
14
15
Make it happy by initializing the variable to NULL.
16
17
Signed-off-by: Kaige Li <likaige@loongson.cn>
18
Message-id: 1596110248-7366-2-git-send-email-likaige@loongson.cn
19
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
20
[PMM: Clean up commit message and note which gcc version this was]
21
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
22
---
23
target/arm/translate-a64.c | 2 +-
24
1 file changed, 1 insertion(+), 1 deletion(-)
25
26
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
27
index XXXXXXX..XXXXXXX 100644
28
--- a/target/arm/translate-a64.c
29
+++ b/target/arm/translate-a64.c
30
@@ -XXX,XX +XXX,XX @@ static void disas_ldst_atomic(DisasContext *s, uint32_t insn,
31
bool r = extract32(insn, 22, 1);
32
bool a = extract32(insn, 23, 1);
33
TCGv_i64 tcg_rs, clean_addr;
34
- AtomicThreeOpFn *fn;
35
+ AtomicThreeOpFn *fn = NULL;
36
37
if (is_vector || !dc_isar_feature(aa64_atomics, s)) {
38
unallocated_encoding(s);
39
--
40
2.20.1
41
42
diff view generated by jsdifflib
Deleted patch
1
The nrf51 SoC model wasn't setting the system_clock_scale
2
global.which meant that if guest code used the systick timer in "use
3
the processor clock" mode it would hang because time never advances.
4
1
5
Set the global to match the documented CPU clock speed for this SoC.
6
7
This SoC in fact doesn't have a SysTick timer (which is the only thing
8
currently that cares about the system_clock_scale), because it's
9
a configurable option in the Cortex-M0. However our Cortex-M0 and
10
thus our nrf51 and our micro:bit board do provide a SysTick, so
11
we ought to provide a functional one rather than a broken one.
12
13
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
14
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
15
Message-id: 20200727193458.31250-1-peter.maydell@linaro.org
16
---
17
hw/arm/nrf51_soc.c | 5 +++++
18
1 file changed, 5 insertions(+)
19
20
diff --git a/hw/arm/nrf51_soc.c b/hw/arm/nrf51_soc.c
21
index XXXXXXX..XXXXXXX 100644
22
--- a/hw/arm/nrf51_soc.c
23
+++ b/hw/arm/nrf51_soc.c
24
@@ -XXX,XX +XXX,XX @@
25
26
#define BASE_TO_IRQ(base) ((base >> 12) & 0x1F)
27
28
+/* HCLK (the main CPU clock) on this SoC is always 16MHz */
29
+#define HCLK_FRQ 16000000
30
+
31
static uint64_t clock_read(void *opaque, hwaddr addr, unsigned int size)
32
{
33
qemu_log_mask(LOG_UNIMP, "%s: 0x%" HWADDR_PRIx " [%u]\n",
34
@@ -XXX,XX +XXX,XX @@ static void nrf51_soc_realize(DeviceState *dev_soc, Error **errp)
35
return;
36
}
37
38
+ system_clock_scale = NANOSECONDS_PER_SECOND / HCLK_FRQ;
39
+
40
object_property_set_link(OBJECT(&s->cpu), "memory", OBJECT(&s->container),
41
&error_abort);
42
if (!sysbus_realize(SYS_BUS_DEVICE(&s->cpu), errp)) {
43
--
44
2.20.1
45
46
diff view generated by jsdifflib
Deleted patch
1
The imx_epit device has a software-controllable reset triggered by
2
setting the SWR bit in the CR register. An error in commit cc2722ec83ad9
3
means that we will end up assert()ing if the guest does this, because
4
the code in imx_epit_write() starts ptimer transactions, and then
5
imx_epit_reset() also starts ptimer transactions, triggering
6
"ptimer_transaction_begin: Assertion `!s->in_transaction' failed".
7
1
8
The cleanest way to avoid this double-transaction is to move the
9
start-transaction for the CR write handling down below the check of
10
the SWR bit.
11
12
Fixes: https://bugs.launchpad.net/qemu/+bug/1880424
13
Fixes: cc2722ec83ad944505fe
14
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
15
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
16
Message-id: 20200727154550.3409-1-peter.maydell@linaro.org
17
---
18
hw/timer/imx_epit.c | 13 ++++++++++---
19
1 file changed, 10 insertions(+), 3 deletions(-)
20
21
diff --git a/hw/timer/imx_epit.c b/hw/timer/imx_epit.c
22
index XXXXXXX..XXXXXXX 100644
23
--- a/hw/timer/imx_epit.c
24
+++ b/hw/timer/imx_epit.c
25
@@ -XXX,XX +XXX,XX @@ static void imx_epit_write(void *opaque, hwaddr offset, uint64_t value,
26
27
switch (offset >> 2) {
28
case 0: /* CR */
29
- ptimer_transaction_begin(s->timer_cmp);
30
- ptimer_transaction_begin(s->timer_reload);
31
32
oldcr = s->cr;
33
s->cr = value & 0x03ffffff;
34
if (s->cr & CR_SWR) {
35
/* handle the reset */
36
imx_epit_reset(DEVICE(s));
37
- } else {
38
+ /*
39
+ * TODO: could we 'break' here? following operations appear
40
+ * to duplicate the work imx_epit_reset() already did.
41
+ */
42
+ }
43
+
44
+ ptimer_transaction_begin(s->timer_cmp);
45
+ ptimer_transaction_begin(s->timer_reload);
46
+
47
+ if (!(s->cr & CR_SWR)) {
48
imx_epit_set_freq(s);
49
}
50
51
--
52
2.20.1
53
54
diff view generated by jsdifflib