1
Some Arm bugfixes for rc2...
1
Handful of bugfixes for rc2. None of these are particularly critical
2
or exciting.
2
3
3
thanks
4
-- PMM
4
-- PMM
5
5
6
The following changes since commit e6ebbd46b6e539f3613136111977721d212c2812:
6
The following changes since commit 45a150aa2b3492acf6691c7bdbeb25a8545d8345:
7
7
8
Merge remote-tracking branch 'remotes/kevin/tags/for-upstream' into staging (2018-11-19 14:31:48 +0000)
8
Merge remote-tracking branch 'remotes/ericb/tags/pull-bitmaps-2020-08-03' into staging (2020-08-03 15:13:49 +0100)
9
9
10
are available in the Git repository at:
10
are available in the Git repository at:
11
11
12
https://git.linaro.org/people/pmaydell/qemu-arm.git tags/pull-target-arm-20181119
12
https://git.linaro.org/people/pmaydell/qemu-arm.git tags/pull-target-arm-20200803
13
13
14
for you to fetch changes up to a00d7f2048c2a1a6a4487ac195c804c78adcf60e:
14
for you to fetch changes up to 13557fd392890cbd985bceba7f717e01efd674b8:
15
15
16
MAINTAINERS: list myself as maintainer for various Arm boards (2018-11-19 15:55:11 +0000)
16
hw/timer/imx_epit: Avoid assertion when CR.SWR is written (2020-08-03 17:56:11 +0100)
17
17
18
----------------------------------------------------------------
18
----------------------------------------------------------------
19
target-arm queue:
19
target-arm queue:
20
* various MAINTAINERS file updates
20
* hw/timer/imx_epit: Avoid assertion when CR.SWR is written
21
* hw/block/onenand: use qemu_log_mask() for reporting
21
* netduino2, netduinoplus2, microbit: set system_clock_scale so that
22
* hw/block/onenand: Fix off-by-one error allowing out-of-bounds read
22
SysTick running on the CPU clock works
23
on the n800 and n810 machine models
23
* target/arm: Avoid maybe-uninitialized warning with gcc 4.9
24
* target/arm: fix smc incorrectly trapping to EL3 when secure is off
24
* target/arm: Fix AddPAC error indication
25
* hw/arm/stm32f205: Fix the UART and Timer region size
25
* Make AIRCR.SYSRESETREQ actually reset the system for the
26
* target/arm: read ID registers for KVM guests so they can be
26
microbit, mps2-*, musca-*, netduino* boards
27
used to gate "is feature X present" checks
28
27
29
----------------------------------------------------------------
28
----------------------------------------------------------------
30
Luc Michel (1):
29
Kaige Li (1):
31
target/arm: fix smc incorrectly trapping to EL3 when secure is off
30
target/arm: Avoid maybe-uninitialized warning with gcc 4.9
32
31
33
Peter Maydell (3):
32
Peter Maydell (6):
34
hw/block/onenand: Fix off-by-one error allowing out-of-bounds read
33
hw/arm/netduino2, netduinoplus2: Set system_clock_scale
35
hw/block/onenand: use qemu_log_mask() for reporting
34
include/hw/irq.h: New function qemu_irq_is_connected()
36
MAINTAINERS: list myself as maintainer for various Arm boards
35
hw/intc/armv7m_nvic: Provide default "reset the system" behaviour for SYSRESETREQ
36
msf2-soc, stellaris: Don't wire up SYSRESETREQ
37
hw/arm/nrf51_soc: Set system_clock_scale
38
hw/timer/imx_epit: Avoid assertion when CR.SWR is written
37
39
38
Richard Henderson (4):
40
Richard Henderson (1):
39
target/arm: Install ARMISARegisters from kvm host
41
target/arm: Fix AddPAC error indication
40
target/arm: Fill in ARMISARegisters for kvm64
41
target/arm: Introduce read_sys_reg32 for kvm32
42
target/arm: Fill in ARMISARegisters for kvm32
43
42
44
Seth Kintigh (1):
43
include/hw/arm/armv7m.h | 4 +++-
45
hw/arm/stm32f205: Fix the UART and Timer region size
44
include/hw/irq.h | 18 ++++++++++++++++++
45
hw/arm/msf2-soc.c | 11 -----------
46
hw/arm/netduino2.c | 10 ++++++++++
47
hw/arm/netduinoplus2.c | 10 ++++++++++
48
hw/arm/nrf51_soc.c | 5 +++++
49
hw/arm/stellaris.c | 12 ------------
50
hw/intc/armv7m_nvic.c | 17 ++++++++++++++++-
51
hw/timer/imx_epit.c | 13 ++++++++++---
52
target/arm/pauth_helper.c | 6 +++++-
53
target/arm/translate-a64.c | 2 +-
54
tests/tcg/aarch64/pauth-5.c | 33 +++++++++++++++++++++++++++++++++
55
tests/tcg/aarch64/Makefile.target | 2 +-
56
13 files changed, 112 insertions(+), 31 deletions(-)
57
create mode 100644 tests/tcg/aarch64/pauth-5.c
46
58
47
Thomas Huth (1):
48
MAINTAINERS: Add entries for missing ARM boards
49
50
target/arm/kvm_arm.h | 1 +
51
hw/block/onenand.c | 24 +++++-----
52
hw/char/stm32f2xx_usart.c | 2 +-
53
hw/timer/stm32f2xx_timer.c | 2 +-
54
target/arm/kvm.c | 1 +
55
target/arm/kvm32.c | 77 ++++++++++++++++++++------------
56
target/arm/kvm64.c | 90 +++++++++++++++++++++++++++++++++++++-
57
target/arm/op_helper.c | 54 +++++++++++++++++++----
58
MAINTAINERS | 106 +++++++++++++++++++++++++++++++++++++++------
59
9 files changed, 293 insertions(+), 64 deletions(-)
60
diff view generated by jsdifflib
1
From: Luc Michel <luc.michel@greensocs.com>
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.
2
4
3
This commit fixes a case where the CPU would try to go to EL3 when
5
Set the global to match the documented CPU clock speed of these boards.
4
executing an smc instruction, even though ARM_FEATURE_EL3 is false. This
6
Judging by the data sheet this is slightly simplistic because the
5
case is raised when the PSCI conduit is set to smc, but the smc
7
SoC allows configuration of the SYSCLK source and frequency via the
6
instruction does not lead to a valid PSCI call.
8
RCC (reset and clock control) module, but we don't model that.
7
9
8
QEMU crashes with an assertion failure latter on because of incoherent
10
Fixes: https://bugs.launchpad.net/qemu/+bug/1876187
9
mmu_idx.
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(+)
10
18
11
This commit refactors the pre_smc helper by enumerating all the possible
19
diff --git a/hw/arm/netduino2.c b/hw/arm/netduino2.c
12
way of handling an scm instruction, and covering the previously missing
13
case leading to the crash.
14
15
The following minimal test would crash before this commit:
16
17
.global _start
18
.text
19
_start:
20
ldr x0, =0xdeadbeef ; invalid PSCI call
21
smc #0
22
23
run with the following command line:
24
25
aarch64-linux-gnu-gcc -nostdinc -nostdlib -Wl,-Ttext=40000000 \
26
-o test test.s
27
28
qemu-system-aarch64 -M virt,virtualization=on,secure=off \
29
-cpu cortex-a57 -kernel test
30
31
Signed-off-by: Luc Michel <luc.michel@greensocs.com>
32
Message-id: 20181117160213.18995-1-luc.michel@greensocs.com
33
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
34
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
35
---
36
target/arm/op_helper.c | 54 +++++++++++++++++++++++++++++++++++-------
37
1 file changed, 46 insertions(+), 8 deletions(-)
38
39
diff --git a/target/arm/op_helper.c b/target/arm/op_helper.c
40
index XXXXXXX..XXXXXXX 100644
20
index XXXXXXX..XXXXXXX 100644
41
--- a/target/arm/op_helper.c
21
--- a/hw/arm/netduino2.c
42
+++ b/target/arm/op_helper.c
22
+++ b/hw/arm/netduino2.c
43
@@ -XXX,XX +XXX,XX @@ void HELPER(pre_smc)(CPUARMState *env, uint32_t syndrome)
23
@@ -XXX,XX +XXX,XX @@
44
ARMCPU *cpu = arm_env_get_cpu(env);
24
#include "hw/arm/stm32f205_soc.h"
45
int cur_el = arm_current_el(env);
25
#include "hw/arm/boot.h"
46
bool secure = arm_is_secure(env);
26
47
- bool smd = env->cp15.scr_el3 & SCR_SMD;
27
+/* Main SYSCLK frequency in Hz (120MHz) */
48
+ bool smd_flag = env->cp15.scr_el3 & SCR_SMD;
28
+#define SYSCLK_FRQ 120000000ULL
49
+
29
+
30
static void netduino2_init(MachineState *machine)
31
{
32
DeviceState *dev;
33
50
+ /*
34
+ /*
51
+ * SMC behaviour is summarized in the following table.
35
+ * TODO: ideally we would model the SoC RCC and let it handle
52
+ * This helper handles the "Trap to EL2" and "Undef insn" cases.
36
+ * system_clock_scale, including its ability to define different
53
+ * The "Trap to EL3" and "PSCI call" cases are handled in the exception
37
+ * possible SYSCLK sources.
54
+ * helper.
55
+ *
56
+ * -> ARM_FEATURE_EL3 and !SMD
57
+ * HCR_TSC && NS EL1 !HCR_TSC || !NS EL1
58
+ *
59
+ * Conduit SMC, valid call Trap to EL2 PSCI Call
60
+ * Conduit SMC, inval call Trap to EL2 Trap to EL3
61
+ * Conduit not SMC Trap to EL2 Trap to EL3
62
+ *
63
+ *
64
+ * -> ARM_FEATURE_EL3 and SMD
65
+ * HCR_TSC && NS EL1 !HCR_TSC || !NS EL1
66
+ *
67
+ * Conduit SMC, valid call Trap to EL2 PSCI Call
68
+ * Conduit SMC, inval call Trap to EL2 Undef insn
69
+ * Conduit not SMC Trap to EL2 Undef insn
70
+ *
71
+ *
72
+ * -> !ARM_FEATURE_EL3
73
+ * HCR_TSC && NS EL1 !HCR_TSC || !NS EL1
74
+ *
75
+ * Conduit SMC, valid call Trap to EL2 PSCI Call
76
+ * Conduit SMC, inval call Trap to EL2 Undef insn
77
+ * Conduit not SMC Undef insn Undef insn
78
+ */
38
+ */
39
+ system_clock_scale = NANOSECONDS_PER_SECOND / SYSCLK_FRQ;
79
+
40
+
80
/* On ARMv8 with EL3 AArch64, SMD applies to both S and NS state.
41
dev = qdev_new(TYPE_STM32F205_SOC);
81
* On ARMv8 with EL3 AArch32, or ARMv7 with the Virtualization
42
qdev_prop_set_string(dev, "cpu-type", ARM_CPU_TYPE_NAME("cortex-m3"));
82
* extensions, SMD only applies to NS state.
43
sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
83
@@ -XXX,XX +XXX,XX @@ void HELPER(pre_smc)(CPUARMState *env, uint32_t syndrome)
44
diff --git a/hw/arm/netduinoplus2.c b/hw/arm/netduinoplus2.c
84
* doesn't exist, but we forbid the guest to set it to 1 in scr_write(),
45
index XXXXXXX..XXXXXXX 100644
85
* so we need not special case this here.
46
--- a/hw/arm/netduinoplus2.c
86
*/
47
+++ b/hw/arm/netduinoplus2.c
87
- bool undef = arm_feature(env, ARM_FEATURE_AARCH64) ? smd : smd && !secure;
48
@@ -XXX,XX +XXX,XX @@
88
+ bool smd = arm_feature(env, ARM_FEATURE_AARCH64) ? smd_flag
49
#include "hw/arm/stm32f405_soc.h"
89
+ : smd_flag && !secure;
50
#include "hw/arm/boot.h"
90
51
91
if (!arm_feature(env, ARM_FEATURE_EL3) &&
52
+/* Main SYSCLK frequency in Hz (168MHz) */
92
cpu->psci_conduit != QEMU_PSCI_CONDUIT_SMC) {
53
+#define SYSCLK_FRQ 168000000ULL
93
@@ -XXX,XX +XXX,XX @@ void HELPER(pre_smc)(CPUARMState *env, uint32_t syndrome)
94
* to forbid its EL1 from making PSCI calls into QEMU's
95
* "firmware" via HCR.TSC, so for these purposes treat
96
* PSCI-via-SMC as implying an EL3.
97
+ * This handles the very last line of the previous table.
98
*/
99
- undef = true;
100
- } else if (!secure && cur_el == 1 && (env->cp15.hcr_el2 & HCR_TSC)) {
101
+ raise_exception(env, EXCP_UDEF, syn_uncategorized(),
102
+ exception_target_el(env));
103
+ }
104
+
54
+
105
+ if (!secure && cur_el == 1 && (env->cp15.hcr_el2 & HCR_TSC)) {
55
static void netduinoplus2_init(MachineState *machine)
106
/* In NS EL1, HCR controlled routing to EL2 has priority over SMD.
56
{
107
* We also want an EL2 guest to be able to forbid its EL1 from
57
DeviceState *dev;
108
* making PSCI calls into QEMU's "firmware" via HCR.TSC.
58
109
+ * This handles all the "Trap to EL2" cases of the previous table.
59
+ /*
110
*/
60
+ * TODO: ideally we would model the SoC RCC and let it handle
111
raise_exception(env, EXCP_HYP_TRAP, syndrome, 2);
61
+ * system_clock_scale, including its ability to define different
112
}
62
+ * possible SYSCLK sources.
113
63
+ */
114
- /* If PSCI is enabled and this looks like a valid PSCI call then
64
+ system_clock_scale = NANOSECONDS_PER_SECOND / SYSCLK_FRQ;
115
- * suppress the UNDEF -- we'll catch the SMC exception and
65
+
116
- * implement the PSCI call behaviour there.
66
dev = qdev_new(TYPE_STM32F405_SOC);
117
+ /* Catch the two remaining "Undef insn" cases of the previous table:
67
qdev_prop_set_string(dev, "cpu-type", ARM_CPU_TYPE_NAME("cortex-m4"));
118
+ * - PSCI conduit is SMC but we don't have a valid PCSI call,
68
sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
119
+ * - We don't have EL3 or SMD is set.
120
*/
121
- if (undef && !arm_is_psci_call(cpu, EXCP_SMC)) {
122
+ if (!arm_is_psci_call(cpu, EXCP_SMC) &&
123
+ (smd || !arm_feature(env, ARM_FEATURE_EL3))) {
124
raise_exception(env, EXCP_UDEF, syn_uncategorized(),
125
exception_target_el(env));
126
}
127
--
69
--
128
2.19.1
70
2.20.1
129
71
130
72
diff view generated by jsdifflib
1
From: Seth Kintigh <skintigh@gmail.com>
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.
2
6
3
The UART and timer devices for the stm32f205 were being created
7
Provide a function qemu_irq_is_connected() that devices can use for
4
with memory regions that were too large. Use the size specified
8
this purpose. (The test is trivial but encapsulating it in a
5
in the chip datasheet.
9
function makes it easier to see where we're doing it in case we need
10
to change the implementation later.)
6
11
7
The old sizes were so large that the devices would overlap with
12
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
8
each other in the SoC memory map, so this fixes a bug that
13
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
9
caused odd behavior and/or crashes when trying to set up multiple
14
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
10
UARTs.
15
Message-id: 20200728103744.6909-2-peter.maydell@linaro.org
16
---
17
include/hw/irq.h | 18 ++++++++++++++++++
18
1 file changed, 18 insertions(+)
11
19
12
Signed-off-by: Seth Kintigh <skintigh@gmail.com>
20
diff --git a/include/hw/irq.h b/include/hw/irq.h
13
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
14
[PMM: rephrased commit message to follow our usual standard]
15
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
16
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
17
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
18
---
19
hw/char/stm32f2xx_usart.c | 2 +-
20
hw/timer/stm32f2xx_timer.c | 2 +-
21
2 files changed, 2 insertions(+), 2 deletions(-)
22
23
diff --git a/hw/char/stm32f2xx_usart.c b/hw/char/stm32f2xx_usart.c
24
index XXXXXXX..XXXXXXX 100644
21
index XXXXXXX..XXXXXXX 100644
25
--- a/hw/char/stm32f2xx_usart.c
22
--- a/include/hw/irq.h
26
+++ b/hw/char/stm32f2xx_usart.c
23
+++ b/include/hw/irq.h
27
@@ -XXX,XX +XXX,XX @@ static void stm32f2xx_usart_init(Object *obj)
24
@@ -XXX,XX +XXX,XX @@ qemu_irq qemu_irq_split(qemu_irq irq1, qemu_irq irq2);
28
sysbus_init_irq(SYS_BUS_DEVICE(obj), &s->irq);
25
on an existing vector of qemu_irq. */
29
26
void qemu_irq_intercept_in(qemu_irq *gpio_in, qemu_irq_handler handler, int n);
30
memory_region_init_io(&s->mmio, obj, &stm32f2xx_usart_ops, s,
27
31
- TYPE_STM32F2XX_USART, 0x2000);
28
+/**
32
+ TYPE_STM32F2XX_USART, 0x400);
29
+ * qemu_irq_is_connected: Return true if IRQ line is wired up
33
sysbus_init_mmio(SYS_BUS_DEVICE(obj), &s->mmio);
30
+ *
34
}
31
+ * If a qemu_irq has a device on the other (receiving) end of it,
35
32
+ * return true; otherwise return false.
36
diff --git a/hw/timer/stm32f2xx_timer.c b/hw/timer/stm32f2xx_timer.c
33
+ *
37
index XXXXXXX..XXXXXXX 100644
34
+ * Usually device models don't need to care whether the machine model
38
--- a/hw/timer/stm32f2xx_timer.c
35
+ * has wired up their outbound qemu_irq lines, because functions like
39
+++ b/hw/timer/stm32f2xx_timer.c
36
+ * qemu_set_irq() silently do nothing if there is nothing on the other
40
@@ -XXX,XX +XXX,XX @@ static void stm32f2xx_timer_init(Object *obj)
37
+ * end of the line. However occasionally a device model will want to
41
sysbus_init_irq(SYS_BUS_DEVICE(obj), &s->irq);
38
+ * provide default behaviour if its output is left floating, and
42
39
+ * it can use this function to identify when that is the case.
43
memory_region_init_io(&s->iomem, obj, &stm32f2xx_timer_ops, s,
40
+ */
44
- "stm32f2xx_timer", 0x4000);
41
+static inline bool qemu_irq_is_connected(qemu_irq irq)
45
+ "stm32f2xx_timer", 0x400);
42
+{
46
sysbus_init_mmio(SYS_BUS_DEVICE(obj), &s->iomem);
43
+ return irq != NULL;
47
44
+}
48
s->timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, stm32f2xx_timer_interrupt, s);
45
+
46
#endif
49
--
47
--
50
2.19.1
48
2.20.1
51
49
52
50
diff view generated by jsdifflib
1
From: Richard Henderson <richard.henderson@linaro.org>
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.
2
8
3
Assert that the value to be written is the correct size.
9
Provide a default behaviour for the case where SYSRESETREQ is not
4
No change in functionality here, just mirroring the same
10
actually connected to anything: use qemu_system_reset_request() to
5
function from kvm64.
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:
6
15
7
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
16
* microbit
8
Message-id: 20181113180154.17903-4-richard.henderson@linaro.org
17
* mps2-an385
9
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
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
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
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
11
---
36
---
12
target/arm/kvm32.c | 41 ++++++++++++++++-------------------------
37
include/hw/arm/armv7m.h | 4 +++-
13
1 file changed, 16 insertions(+), 25 deletions(-)
38
hw/intc/armv7m_nvic.c | 17 ++++++++++++++++-
39
2 files changed, 19 insertions(+), 2 deletions(-)
14
40
15
diff --git a/target/arm/kvm32.c b/target/arm/kvm32.c
41
diff --git a/include/hw/arm/armv7m.h b/include/hw/arm/armv7m.h
16
index XXXXXXX..XXXXXXX 100644
42
index XXXXXXX..XXXXXXX 100644
17
--- a/target/arm/kvm32.c
43
--- a/include/hw/arm/armv7m.h
18
+++ b/target/arm/kvm32.c
44
+++ b/include/hw/arm/armv7m.h
19
@@ -XXX,XX +XXX,XX @@ static inline void set_feature(uint64_t *features, int feature)
45
@@ -XXX,XX +XXX,XX @@ typedef struct {
20
*features |= 1ULL << feature;
46
21
}
47
/* ARMv7M container object.
22
48
* + Unnamed GPIO input lines: external IRQ lines for the NVIC
23
+static int read_sys_reg32(int fd, uint32_t *pret, uint64_t id)
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)
24
+{
73
+{
25
+ struct kvm_one_reg idreg = { .id = id, .addr = (uintptr_t)pret };
74
+ if (qemu_irq_is_connected(s->sysresetreq)) {
26
+
75
+ qemu_irq_pulse(s->sysresetreq);
27
+ assert((id & KVM_REG_SIZE_MASK) == KVM_REG_SIZE_U32);
76
+ } else {
28
+ return ioctl(fd, KVM_GET_ONE_REG, &idreg);
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
+ }
29
+}
84
+}
30
+
85
+
31
bool kvm_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf)
86
static int nvic_pending_prio(NVICState *s)
32
{
87
{
33
/* Identify the feature bits corresponding to the host CPU, and
88
/* return the group priority of the current pending interrupt,
34
@@ -XXX,XX +XXX,XX @@ bool kvm_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf)
89
@@ -XXX,XX +XXX,XX @@ static void nvic_writel(NVICState *s, uint32_t offset, uint32_t value,
35
* we have to create a scratch VM, create a single CPU inside it,
90
if (value & R_V7M_AIRCR_SYSRESETREQ_MASK) {
36
* and then query that CPU for the relevant ID registers.
91
if (attrs.secure ||
37
*/
92
!(cpu->env.v7m.aircr & R_V7M_AIRCR_SYSRESETREQS_MASK)) {
38
- int i, ret, fdarray[3];
93
- qemu_irq_pulse(s->sysresetreq);
39
+ int err = 0, fdarray[3];
94
+ signal_sysresetreq(s);
40
uint32_t midr, id_pfr0, mvfr1;
95
}
41
uint64_t features = 0;
96
}
42
+
97
if (value & R_V7M_AIRCR_VECTCLRACTIVE_MASK) {
43
/* Old kernels may not know about the PREFERRED_TARGET ioctl: however
44
* we know these will only support creating one kind of guest CPU,
45
* which is its preferred CPU type.
46
@@ -XXX,XX +XXX,XX @@ bool kvm_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf)
47
QEMU_KVM_ARM_TARGET_NONE
48
};
49
struct kvm_vcpu_init init;
50
- struct kvm_one_reg idregs[] = {
51
- {
52
- .id = KVM_REG_ARM | KVM_REG_SIZE_U32
53
- | ENCODE_CP_REG(15, 0, 0, 0, 0, 0, 0),
54
- .addr = (uintptr_t)&midr,
55
- },
56
- {
57
- .id = KVM_REG_ARM | KVM_REG_SIZE_U32
58
- | ENCODE_CP_REG(15, 0, 0, 0, 1, 0, 0),
59
- .addr = (uintptr_t)&id_pfr0,
60
- },
61
- {
62
- .id = KVM_REG_ARM | KVM_REG_SIZE_U32
63
- | KVM_REG_ARM_VFP | KVM_REG_ARM_VFP_MVFR1,
64
- .addr = (uintptr_t)&mvfr1,
65
- },
66
- };
67
68
if (!kvm_arm_create_scratch_host_vcpu(cpus_to_try, fdarray, &init)) {
69
return false;
70
@@ -XXX,XX +XXX,XX @@ bool kvm_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf)
71
*/
72
ahcf->dtb_compatible = "arm,arm-v7";
73
74
- for (i = 0; i < ARRAY_SIZE(idregs); i++) {
75
- ret = ioctl(fdarray[2], KVM_GET_ONE_REG, &idregs[i]);
76
- if (ret) {
77
- break;
78
- }
79
- }
80
+ err |= read_sys_reg32(fdarray[2], &midr, ARM_CP15_REG32(0, 0, 0, 0));
81
+ err |= read_sys_reg32(fdarray[2], &id_pfr0, ARM_CP15_REG32(0, 0, 1, 0));
82
+ err |= read_sys_reg32(fdarray[2], &mvfr1,
83
+ KVM_REG_ARM | KVM_REG_SIZE_U32 |
84
+ KVM_REG_ARM_VFP | KVM_REG_ARM_VFP_MVFR1);
85
86
kvm_arm_destroy_scratch_host_vcpu(fdarray);
87
88
- if (ret) {
89
+ if (err < 0) {
90
return false;
91
}
92
93
--
98
--
94
2.19.1
99
2.20.1
95
100
96
101
diff view generated by jsdifflib
1
Update the onenand device to use qemu_log_mask() for reporting
1
The MSF2 SoC model and the Stellaris board code both wire
2
guest errors and unimplemented features, rather than plain
2
SYSRESETREQ up to a function that just invokes
3
fprintf() and hw_error().
3
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
4
4
This is now the default action that the NVIC does if the line is
5
(We leave the hw_error() in onenand_reset(), as that is
5
not connected, so we can delete the handling code.
6
triggered by a failure to read the underlying block device
7
for the bootRAM, not by guest action.)
8
6
9
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
7
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
10
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
8
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
11
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
9
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
12
Reviewed-by: Thomas Huth <thuth@redhat.com>
10
Message-id: 20200728103744.6909-4-peter.maydell@linaro.org
13
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
14
Message-id: 20181115143535.5885-3-peter.maydell@linaro.org
15
---
11
---
16
hw/block/onenand.c | 22 +++++++++++++---------
12
hw/arm/msf2-soc.c | 11 -----------
17
1 file changed, 13 insertions(+), 9 deletions(-)
13
hw/arm/stellaris.c | 12 ------------
14
2 files changed, 23 deletions(-)
18
15
19
diff --git a/hw/block/onenand.c b/hw/block/onenand.c
16
diff --git a/hw/arm/msf2-soc.c b/hw/arm/msf2-soc.c
20
index XXXXXXX..XXXXXXX 100644
17
index XXXXXXX..XXXXXXX 100644
21
--- a/hw/block/onenand.c
18
--- a/hw/arm/msf2-soc.c
22
+++ b/hw/block/onenand.c
19
+++ b/hw/arm/msf2-soc.c
23
@@ -XXX,XX +XXX,XX @@
20
@@ -XXX,XX +XXX,XX @@
24
#include "exec/memory.h"
21
#include "hw/irq.h"
25
#include "hw/sysbus.h"
22
#include "hw/arm/msf2-soc.h"
26
#include "qemu/error-report.h"
23
#include "hw/misc/unimp.h"
27
+#include "qemu/log.h"
24
-#include "sysemu/runstate.h"
28
25
#include "sysemu/sysemu.h"
29
/* 11 for 2kB-page OneNAND ("2nd generation") and 10 for 1kB-page chips */
26
30
#define PAGE_SHIFT    11
27
#define MSF2_TIMER_BASE 0x40004000
31
@@ -XXX,XX +XXX,XX @@ static void onenand_command(OneNANDState *s)
28
@@ -XXX,XX +XXX,XX @@ static const int spi_irq[MSF2_NUM_SPIS] = { 2, 3 };
32
default:
29
static const int uart_irq[MSF2_NUM_UARTS] = { 10, 11 };
33
s->status |= ONEN_ERR_CMD;
30
static const int timer_irq[MSF2_NUM_TIMERS] = { 14, 15 };
34
s->intstatus |= ONEN_INT;
31
35
- fprintf(stderr, "%s: unknown OneNAND command %x\n",
32
-static void do_sys_reset(void *opaque, int n, int level)
36
- __func__, s->command);
33
-{
37
+ qemu_log_mask(LOG_GUEST_ERROR, "unknown OneNAND command %x\n",
34
- if (level) {
38
+ s->command);
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;
39
}
44
}
40
45
41
onenand_intr_update(s);
46
- qdev_connect_gpio_out_named(DEVICE(&s->armv7m.nvic), "SYSRESETREQ", 0,
42
@@ -XXX,XX +XXX,XX @@ static uint64_t onenand_read(void *opaque, hwaddr addr,
47
- qemu_allocate_irq(&do_sys_reset, NULL, 0));
43
case 0xff02:    /* ECC Result of spare area data */
48
-
44
case 0xff03:    /* ECC Result of main area data */
49
system_clock_scale = NANOSECONDS_PER_SECOND / s->m3clk;
45
case 0xff04:    /* ECC Result of spare area data */
50
46
- hw_error("%s: implement ECC\n", __func__);
51
for (i = 0; i < MSF2_NUM_UARTS; i++) {
47
+ qemu_log_mask(LOG_UNIMP,
52
diff --git a/hw/arm/stellaris.c b/hw/arm/stellaris.c
48
+ "onenand: ECC result registers unimplemented\n");
53
index XXXXXXX..XXXXXXX 100644
49
return 0x0000;
54
--- a/hw/arm/stellaris.c
50
}
55
+++ b/hw/arm/stellaris.c
51
56
@@ -XXX,XX +XXX,XX @@
52
- fprintf(stderr, "%s: unknown OneNAND register %x\n",
57
#include "hw/boards.h"
53
- __func__, offset);
58
#include "qemu/log.h"
54
+ qemu_log_mask(LOG_GUEST_ERROR, "read of unknown OneNAND register 0x%x\n",
59
#include "exec/address-spaces.h"
55
+ offset);
60
-#include "sysemu/runstate.h"
56
return 0;
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);
57
}
66
}
58
67
59
@@ -XXX,XX +XXX,XX @@ static void onenand_write(void *opaque, hwaddr addr,
68
-static
60
break;
69
-void do_sys_reset(void *opaque, int n, int level)
61
70
-{
62
default:
71
- if (level) {
63
- fprintf(stderr, "%s: unknown OneNAND boot command %"PRIx64"\n",
72
- qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
64
- __func__, value);
73
- }
65
+ qemu_log_mask(LOG_GUEST_ERROR,
74
-}
66
+ "unknown OneNAND boot command %" PRIx64 "\n",
75
-
67
+ value);
76
/* Board init. */
68
}
77
static stellaris_board_info stellaris_boards[] = {
69
break;
78
{ "LM3S811EVB",
70
79
@@ -XXX,XX +XXX,XX @@ static void stellaris_init(MachineState *ms, stellaris_board_info *board)
71
@@ -XXX,XX +XXX,XX @@ static void onenand_write(void *opaque, hwaddr addr,
80
/* This will exit with an error if the user passed us a bad cpu_type */
72
break;
81
sysbus_realize_and_unref(SYS_BUS_DEVICE(nvic), &error_fatal);
73
82
74
default:
83
- qdev_connect_gpio_out_named(nvic, "SYSRESETREQ", 0,
75
- fprintf(stderr, "%s: unknown OneNAND register %x\n",
84
- qemu_allocate_irq(&do_sys_reset, NULL, 0));
76
- __func__, offset);
85
-
77
+ qemu_log_mask(LOG_GUEST_ERROR,
86
if (board->dc1 & (1 << 16)) {
78
+ "write to unknown OneNAND register 0x%x\n",
87
dev = sysbus_create_varargs(TYPE_STELLARIS_ADC, 0x40038000,
79
+ offset);
88
qdev_get_gpio_in(nvic, 14),
80
}
81
}
82
83
--
89
--
84
2.19.1
90
2.20.1
85
91
86
92
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 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>
3
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
16
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
Message-id: 20181113180154.17903-3-richard.henderson@linaro.org
17
Message-id: 20200728195706.11087-1-richard.henderson@linaro.org
5
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
18
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
19
[PMM: added comment about the divergence from the pseudocode]
6
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
20
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
7
---
21
---
8
target/arm/kvm64.c | 90 ++++++++++++++++++++++++++++++++++++++++++++--
22
target/arm/pauth_helper.c | 6 +++++-
9
1 file changed, 88 insertions(+), 2 deletions(-)
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
10
27
11
diff --git a/target/arm/kvm64.c b/target/arm/kvm64.c
28
diff --git a/target/arm/pauth_helper.c b/target/arm/pauth_helper.c
12
index XXXXXXX..XXXXXXX 100644
29
index XXXXXXX..XXXXXXX 100644
13
--- a/target/arm/kvm64.c
30
--- a/target/arm/pauth_helper.c
14
+++ b/target/arm/kvm64.c
31
+++ b/target/arm/pauth_helper.c
15
@@ -XXX,XX +XXX,XX @@ static inline void unset_feature(uint64_t *features, int feature)
32
@@ -XXX,XX +XXX,XX @@ static uint64_t pauth_addpac(CPUARMState *env, uint64_t ptr, uint64_t modifier,
16
*features &= ~(1ULL << feature);
33
*/
17
}
34
test = sextract64(ptr, bot_bit, top_bit - bot_bit);
18
35
if (test != 0 && test != -1) {
19
+static int read_sys_reg32(int fd, uint32_t *pret, uint64_t id)
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()
20
+{
56
+{
21
+ uint64_t ret;
57
+ int *p0 = &x, *p1, *p2, *p3;
22
+ struct kvm_one_reg idreg = { .id = id, .addr = (uintptr_t)&ret };
58
+ unsigned long salt = 0;
23
+ int err;
24
+
59
+
25
+ assert((id & KVM_REG_SIZE_MASK) == KVM_REG_SIZE_U64);
60
+ /*
26
+ err = ioctl(fd, KVM_GET_ONE_REG, &idreg);
61
+ * With TBI enabled and a 48-bit VA, there are 7 bits of auth, and so
27
+ if (err < 0) {
62
+ * a 1/128 chance of auth = pac(ptr,key,salt) producing zero.
28
+ return -1;
63
+ * Find a salt that creates auth != 0.
29
+ }
64
+ */
30
+ *pret = ret;
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);
31
+ return 0;
82
+ return 0;
32
+}
83
+}
33
+
84
diff --git a/tests/tcg/aarch64/Makefile.target b/tests/tcg/aarch64/Makefile.target
34
+static int read_sys_reg64(int fd, uint64_t *pret, uint64_t id)
85
index XXXXXXX..XXXXXXX 100644
35
+{
86
--- a/tests/tcg/aarch64/Makefile.target
36
+ struct kvm_one_reg idreg = { .id = id, .addr = (uintptr_t)pret };
87
+++ b/tests/tcg/aarch64/Makefile.target
37
+
88
@@ -XXX,XX +XXX,XX @@ run-fcvt: fcvt
38
+ assert((id & KVM_REG_SIZE_MASK) == KVM_REG_SIZE_U64);
89
39
+ return ioctl(fd, KVM_GET_ONE_REG, &idreg);
90
# Pauth Tests
40
+}
91
ifneq ($(DOCKER_IMAGE)$(CROSS_CC_HAS_ARMV8_3),)
41
+
92
-AARCH64_TESTS += pauth-1 pauth-2 pauth-4
42
bool kvm_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf)
93
+AARCH64_TESTS += pauth-1 pauth-2 pauth-4 pauth-5
43
{
94
pauth-%: CFLAGS += -march=armv8.3-a
44
/* Identify the feature bits corresponding to the host CPU, and
95
run-pauth-%: QEMU_OPTS += -cpu max
45
* fill out the ARMHostCPUClass fields accordingly. To do this
96
run-plugin-pauth-%: QEMU_OPTS += -cpu max
46
* we have to create a scratch VM, create a single CPU inside it,
47
* and then query that CPU for the relevant ID registers.
48
- * For AArch64 we currently don't care about ID registers at
49
- * all; we just want to know the CPU type.
50
*/
51
int fdarray[3];
52
uint64_t features = 0;
53
+ int err;
54
+
55
/* Old kernels may not know about the PREFERRED_TARGET ioctl: however
56
* we know these will only support creating one kind of guest CPU,
57
* which is its preferred CPU type. Fortunately these old kernels
58
@@ -XXX,XX +XXX,XX @@ bool kvm_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf)
59
ahcf->target = init.target;
60
ahcf->dtb_compatible = "arm,arm-v8";
61
62
+ err = read_sys_reg64(fdarray[2], &ahcf->isar.id_aa64pfr0,
63
+ ARM64_SYS_REG(3, 0, 0, 4, 0));
64
+ if (unlikely(err < 0)) {
65
+ /*
66
+ * Before v4.15, the kernel only exposed a limited number of system
67
+ * registers, not including any of the interesting AArch64 ID regs.
68
+ * For the most part we could leave these fields as zero with minimal
69
+ * effect, since this does not affect the values seen by the guest.
70
+ *
71
+ * However, it could cause problems down the line for QEMU,
72
+ * so provide a minimal v8.0 default.
73
+ *
74
+ * ??? Could read MIDR and use knowledge from cpu64.c.
75
+ * ??? Could map a page of memory into our temp guest and
76
+ * run the tiniest of hand-crafted kernels to extract
77
+ * the values seen by the guest.
78
+ * ??? Either of these sounds like too much effort just
79
+ * to work around running a modern host kernel.
80
+ */
81
+ ahcf->isar.id_aa64pfr0 = 0x00000011; /* EL1&0, AArch64 only */
82
+ err = 0;
83
+ } else {
84
+ err |= read_sys_reg64(fdarray[2], &ahcf->isar.id_aa64pfr1,
85
+ ARM64_SYS_REG(3, 0, 0, 4, 1));
86
+ err |= read_sys_reg64(fdarray[2], &ahcf->isar.id_aa64isar0,
87
+ ARM64_SYS_REG(3, 0, 0, 6, 0));
88
+ err |= read_sys_reg64(fdarray[2], &ahcf->isar.id_aa64isar1,
89
+ ARM64_SYS_REG(3, 0, 0, 6, 1));
90
+
91
+ /*
92
+ * Note that if AArch32 support is not present in the host,
93
+ * the AArch32 sysregs are present to be read, but will
94
+ * return UNKNOWN values. This is neither better nor worse
95
+ * than skipping the reads and leaving 0, as we must avoid
96
+ * considering the values in every case.
97
+ */
98
+ err |= read_sys_reg32(fdarray[2], &ahcf->isar.id_isar0,
99
+ ARM64_SYS_REG(3, 0, 0, 2, 0));
100
+ err |= read_sys_reg32(fdarray[2], &ahcf->isar.id_isar1,
101
+ ARM64_SYS_REG(3, 0, 0, 2, 1));
102
+ err |= read_sys_reg32(fdarray[2], &ahcf->isar.id_isar2,
103
+ ARM64_SYS_REG(3, 0, 0, 2, 2));
104
+ err |= read_sys_reg32(fdarray[2], &ahcf->isar.id_isar3,
105
+ ARM64_SYS_REG(3, 0, 0, 2, 3));
106
+ err |= read_sys_reg32(fdarray[2], &ahcf->isar.id_isar4,
107
+ ARM64_SYS_REG(3, 0, 0, 2, 4));
108
+ err |= read_sys_reg32(fdarray[2], &ahcf->isar.id_isar5,
109
+ ARM64_SYS_REG(3, 0, 0, 2, 5));
110
+ err |= read_sys_reg32(fdarray[2], &ahcf->isar.id_isar6,
111
+ ARM64_SYS_REG(3, 0, 0, 2, 7));
112
+
113
+ err |= read_sys_reg32(fdarray[2], &ahcf->isar.mvfr0,
114
+ ARM64_SYS_REG(3, 0, 0, 3, 0));
115
+ err |= read_sys_reg32(fdarray[2], &ahcf->isar.mvfr1,
116
+ ARM64_SYS_REG(3, 0, 0, 3, 1));
117
+ err |= read_sys_reg32(fdarray[2], &ahcf->isar.mvfr2,
118
+ ARM64_SYS_REG(3, 0, 0, 3, 2));
119
+ }
120
+
121
kvm_arm_destroy_scratch_host_vcpu(fdarray);
122
123
+ if (err < 0) {
124
+ return false;
125
+ }
126
+
127
/* We can assume any KVM supporting CPU is at least a v8
128
* with VFPv4+Neon; this in turn implies most of the other
129
* feature bits.
130
--
97
--
131
2.19.1
98
2.20.1
132
99
133
100
diff view generated by jsdifflib
1
An off-by-one error in a switch case in onenand_read() allowed
1
From: Kaige Li <likaige@loongson.cn>
2
a misbehaving guest to read off the end of a block of memory.
3
2
4
NB: the onenand device is used only by the "n800" and "n810"
3
GCC version 4.9.4 isn't clever enough to figure out that all
5
machines, which are usable only with TCG, not KVM, so this is
4
execution paths in disas_ldst() that use 'fn' will have initialized
6
not a security issue.
5
it first, and so it warns:
7
6
8
Reported-by: Thomas Huth <thuth@redhat.com>
7
/home/LiKaige/qemu/target/arm/translate-a64.c: In function ‘disas_ldst’:
9
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
8
/home/LiKaige/qemu/target/arm/translate-a64.c:3392:5: error: ‘fn’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
10
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
9
fn(cpu_reg(s, rt), clean_addr, tcg_rs, get_mem_index(s),
11
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
10
^
12
Message-id: 20181115143535.5885-2-peter.maydell@linaro.org
11
/home/LiKaige/qemu/target/arm/translate-a64.c:3318:22: note: ‘fn’ was declared here
13
Suggested-by: Richard Henderson <richard.henderson@linaro.org>
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]
14
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
21
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
15
---
22
---
16
hw/block/onenand.c | 2 +-
23
target/arm/translate-a64.c | 2 +-
17
1 file changed, 1 insertion(+), 1 deletion(-)
24
1 file changed, 1 insertion(+), 1 deletion(-)
18
25
19
diff --git a/hw/block/onenand.c b/hw/block/onenand.c
26
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
20
index XXXXXXX..XXXXXXX 100644
27
index XXXXXXX..XXXXXXX 100644
21
--- a/hw/block/onenand.c
28
--- a/target/arm/translate-a64.c
22
+++ b/hw/block/onenand.c
29
+++ b/target/arm/translate-a64.c
23
@@ -XXX,XX +XXX,XX @@ static uint64_t onenand_read(void *opaque, hwaddr addr,
30
@@ -XXX,XX +XXX,XX @@ static void disas_ldst_atomic(DisasContext *s, uint32_t insn,
24
int offset = addr >> s->shift;
31
bool r = extract32(insn, 22, 1);
25
32
bool a = extract32(insn, 23, 1);
26
switch (offset) {
33
TCGv_i64 tcg_rs, clean_addr;
27
- case 0x0000 ... 0xc000:
34
- AtomicThreeOpFn *fn;
28
+ case 0x0000 ... 0xbffe:
35
+ AtomicThreeOpFn *fn = NULL;
29
return lduw_le_p(s->boot[0] + addr);
36
30
37
if (is_vector || !dc_isar_feature(aa64_atomics, s)) {
31
case 0xf000:    /* Manufacturer ID */
38
unallocated_encoding(s);
32
--
39
--
33
2.19.1
40
2.20.1
34
41
35
42
diff view generated by jsdifflib
1
In practice for most of the more-or-less orphan Arm board models,
1
The nrf51 SoC model wasn't setting the system_clock_scale
2
I will review patches and put them in via the target-arm tree.
2
global.which meant that if guest code used the systick timer in "use
3
So list myself as an "Odd Fixes" status maintainer for them.
3
the processor clock" mode it would hang because time never advances.
4
4
5
This commit downgrades these boards to "Odd Fixes":
5
Set the global to match the documented CPU clock speed for this SoC.
6
* Allwinner-A10
7
* Exynos
8
* Calxeda Highbank
9
* Canon DIGIC
10
* Musicpal
11
* nSeries
12
* Palm
13
* PXA2xx
14
6
15
These boards were already "Odd Fixes":
7
This SoC in fact doesn't have a SysTick timer (which is the only thing
16
* Gumstix
8
currently that cares about the system_clock_scale), because it's
17
* i.MX31 (kzm)
9
a configurable option in the Cortex-M0. However our Cortex-M0 and
18
10
thus our nrf51 and our micro:bit board do provide a SysTick, so
19
Philippe Mathieu-Daudé has requested to be moved to R:
11
we ought to provide a functional one rather than a broken one.
20
status for Gumstix now that I am listed as the M: contact.
21
22
Some boards are maintained, but their patches still go
23
via the target-arm tree, so add myself as a secondary
24
maintainer contact for those:
25
* Xilinx Zynq
26
* Xilinx ZynqMP
27
* STM32F205
28
* Netduino 2
29
* SmartFusion2
30
* Mecraft M2S-FG484
31
* ASPEED BMCs
32
* NRF51
33
12
34
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
13
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
35
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
14
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
36
Reviewed-by: Thomas Huth <thuth@redhat.com>
15
Message-id: 20200727193458.31250-1-peter.maydell@linaro.org
37
Message-id: 20181108134139.31666-1-peter.maydell@linaro.org
38
---
16
---
39
MAINTAINERS | 36 +++++++++++++++++++++++++++---------
17
hw/arm/nrf51_soc.c | 5 +++++
40
1 file changed, 27 insertions(+), 9 deletions(-)
18
1 file changed, 5 insertions(+)
41
19
42
diff --git a/MAINTAINERS b/MAINTAINERS
20
diff --git a/hw/arm/nrf51_soc.c b/hw/arm/nrf51_soc.c
43
index XXXXXXX..XXXXXXX 100644
21
index XXXXXXX..XXXXXXX 100644
44
--- a/MAINTAINERS
22
--- a/hw/arm/nrf51_soc.c
45
+++ b/MAINTAINERS
23
+++ b/hw/arm/nrf51_soc.c
46
@@ -XXX,XX +XXX,XX @@ ARM Machines
24
@@ -XXX,XX +XXX,XX @@
47
------------
25
48
Allwinner-a10
26
#define BASE_TO_IRQ(base) ((base >> 12) & 0x1F)
49
M: Beniamino Galvani <b.galvani@gmail.com>
27
50
+M: Peter Maydell <peter.maydell@linaro.org>
28
+/* HCLK (the main CPU clock) on this SoC is always 16MHz */
51
L: qemu-arm@nongnu.org
29
+#define HCLK_FRQ 16000000
52
-S: Maintained
30
+
53
+S: Odd Fixes
31
static uint64_t clock_read(void *opaque, hwaddr addr, unsigned int size)
54
F: hw/*/allwinner*
32
{
55
F: include/hw/*/allwinner*
33
qemu_log_mask(LOG_UNIMP, "%s: 0x%" HWADDR_PRIx " [%u]\n",
56
F: hw/arm/cubieboard.c
34
@@ -XXX,XX +XXX,XX @@ static void nrf51_soc_realize(DeviceState *dev_soc, Error **errp)
57
@@ -XXX,XX +XXX,XX @@ F: tests/test-arm-mptimer.c
35
return;
58
36
}
59
Exynos
37
60
M: Igor Mitsyanko <i.mitsyanko@gmail.com>
38
+ system_clock_scale = NANOSECONDS_PER_SECOND / HCLK_FRQ;
61
+M: Peter Maydell <peter.maydell@linaro.org>
39
+
62
L: qemu-arm@nongnu.org
40
object_property_set_link(OBJECT(&s->cpu), "memory", OBJECT(&s->container),
63
-S: Maintained
41
&error_abort);
64
+S: Odd Fixes
42
if (!sysbus_realize(SYS_BUS_DEVICE(&s->cpu), errp)) {
65
F: hw/*/exynos*
66
F: include/hw/arm/exynos4210.h
67
68
Calxeda Highbank
69
M: Rob Herring <robh@kernel.org>
70
+M: Peter Maydell <peter.maydell@linaro.org>
71
L: qemu-arm@nongnu.org
72
-S: Maintained
73
+S: Odd Fixes
74
F: hw/arm/highbank.c
75
F: hw/net/xgmac.c
76
77
Canon DIGIC
78
M: Antony Pavlov <antonynpavlov@gmail.com>
79
+M: Peter Maydell <peter.maydell@linaro.org>
80
L: qemu-arm@nongnu.org
81
-S: Maintained
82
+S: Odd Fixes
83
F: include/hw/arm/digic.h
84
F: hw/*/digic*
85
86
Gumstix
87
-M: Philippe Mathieu-Daudé <f4bug@amsat.org>
88
+M: Peter Maydell <peter.maydell@linaro.org>
89
+R: Philippe Mathieu-Daudé <f4bug@amsat.org>
90
L: qemu-devel@nongnu.org
91
L: qemu-arm@nongnu.org
92
S: Odd Fixes
93
@@ -XXX,XX +XXX,XX @@ F: hw/arm/gumstix.c
94
95
i.MX31 (kzm)
96
M: Peter Chubb <peter.chubb@nicta.com.au>
97
+M: Peter Maydell <peter.maydell@linaro.org>
98
L: qemu-arm@nongnu.org
99
S: Odd Fixes
100
F: hw/arm/kzm.c
101
@@ -XXX,XX +XXX,XX @@ F: include/hw/misc/iotkit-sysinfo.h
102
103
Musicpal
104
M: Jan Kiszka <jan.kiszka@web.de>
105
+M: Peter Maydell <peter.maydell@linaro.org>
106
L: qemu-arm@nongnu.org
107
-S: Maintained
108
+S: Odd Fixes
109
F: hw/arm/musicpal.c
110
111
nSeries
112
M: Andrzej Zaborowski <balrogg@gmail.com>
113
+M: Peter Maydell <peter.maydell@linaro.org>
114
L: qemu-arm@nongnu.org
115
-S: Maintained
116
+S: Odd Fixes
117
F: hw/arm/nseries.c
118
119
Palm
120
M: Andrzej Zaborowski <balrogg@gmail.com>
121
+M: Peter Maydell <peter.maydell@linaro.org>
122
L: qemu-arm@nongnu.org
123
-S: Maintained
124
+S: Odd Fixes
125
F: hw/arm/palm.c
126
127
Raspberry Pi
128
@@ -XXX,XX +XXX,XX @@ F: include/hw/intc/realview_gic.h
129
130
PXA2XX
131
M: Andrzej Zaborowski <balrogg@gmail.com>
132
+M: Peter Maydell <peter.maydell@linaro.org>
133
L: qemu-arm@nongnu.org
134
-S: Maintained
135
+S: Odd Fixes
136
F: hw/arm/mainstone.c
137
F: hw/arm/spitz.c
138
F: hw/arm/tosa.c
139
@@ -XXX,XX +XXX,XX @@ F: include/hw/arm/virt.h
140
Xilinx Zynq
141
M: Edgar E. Iglesias <edgar.iglesias@gmail.com>
142
M: Alistair Francis <alistair@alistair23.me>
143
+M: Peter Maydell <peter.maydell@linaro.org>
144
L: qemu-arm@nongnu.org
145
S: Maintained
146
F: hw/*/xilinx_*
147
@@ -XXX,XX +XXX,XX @@ X: hw/ssi/xilinx_*
148
Xilinx ZynqMP
149
M: Alistair Francis <alistair@alistair23.me>
150
M: Edgar E. Iglesias <edgar.iglesias@gmail.com>
151
+M: Peter Maydell <peter.maydell@linaro.org>
152
L: qemu-arm@nongnu.org
153
S: Maintained
154
F: hw/*/xlnx*.c
155
@@ -XXX,XX +XXX,XX @@ F: hw/arm/virt-acpi-build.c
156
157
STM32F205
158
M: Alistair Francis <alistair@alistair23.me>
159
+M: Peter Maydell <peter.maydell@linaro.org>
160
S: Maintained
161
F: hw/arm/stm32f205_soc.c
162
F: hw/misc/stm32f2xx_syscfg.c
163
@@ -XXX,XX +XXX,XX @@ F: include/hw/*/stm32*.h
164
165
Netduino 2
166
M: Alistair Francis <alistair@alistair23.me>
167
+M: Peter Maydell <peter.maydell@linaro.org>
168
S: Maintained
169
F: hw/arm/netduino2.c
170
171
SmartFusion2
172
M: Subbaraya Sundeep <sundeep.lkml@gmail.com>
173
+M: Peter Maydell <peter.maydell@linaro.org>
174
S: Maintained
175
F: hw/arm/msf2-soc.c
176
F: hw/misc/msf2-sysreg.c
177
@@ -XXX,XX +XXX,XX @@ F: include/hw/ssi/mss-spi.h
178
179
Emcraft M2S-FG484
180
M: Subbaraya Sundeep <sundeep.lkml@gmail.com>
181
+M: Peter Maydell <peter.maydell@linaro.org>
182
S: Maintained
183
F: hw/arm/msf2-som.c
184
185
ASPEED BMCs
186
M: Cédric Le Goater <clg@kaod.org>
187
+M: Peter Maydell <peter.maydell@linaro.org>
188
R: Andrew Jeffery <andrew@aj.id.au>
189
R: Joel Stanley <joel@jms.id.au>
190
L: qemu-arm@nongnu.org
191
@@ -XXX,XX +XXX,XX @@ F: include/hw/net/ftgmac100.h
192
193
NRF51
194
M: Joel Stanley <joel@jms.id.au>
195
+M: Peter Maydell <peter.maydell@linaro.org>
196
L: qemu-arm@nongnu.org
197
S: Maintained
198
F: hw/arm/nrf51_soc.c
199
--
43
--
200
2.19.1
44
2.20.1
201
45
202
46
diff view generated by jsdifflib
1
From: Richard Henderson <richard.henderson@linaro.org>
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".
2
7
3
The ID registers are replacing (some of) the feature bits.
8
The cleanest way to avoid this double-transaction is to move the
4
We need (some of) these values to determine the set of data
9
start-transaction for the CR write handling down below the check of
5
to be handled during migration.
10
the SWR bit.
6
11
7
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
12
Fixes: https://bugs.launchpad.net/qemu/+bug/1880424
8
Message-id: 20181113180154.17903-2-richard.henderson@linaro.org
13
Fixes: cc2722ec83ad944505fe
9
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
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
11
---
17
---
12
target/arm/kvm_arm.h | 1 +
18
hw/timer/imx_epit.c | 13 ++++++++++---
13
target/arm/kvm.c | 1 +
19
1 file changed, 10 insertions(+), 3 deletions(-)
14
2 files changed, 2 insertions(+)
15
20
16
diff --git a/target/arm/kvm_arm.h b/target/arm/kvm_arm.h
21
diff --git a/hw/timer/imx_epit.c b/hw/timer/imx_epit.c
17
index XXXXXXX..XXXXXXX 100644
22
index XXXXXXX..XXXXXXX 100644
18
--- a/target/arm/kvm_arm.h
23
--- a/hw/timer/imx_epit.c
19
+++ b/target/arm/kvm_arm.h
24
+++ b/hw/timer/imx_epit.c
20
@@ -XXX,XX +XXX,XX @@ void kvm_arm_destroy_scratch_host_vcpu(int *fdarray);
25
@@ -XXX,XX +XXX,XX @@ static void imx_epit_write(void *opaque, hwaddr offset, uint64_t value,
21
* by asking the host kernel)
26
22
*/
27
switch (offset >> 2) {
23
typedef struct ARMHostCPUFeatures {
28
case 0: /* CR */
24
+ ARMISARegisters isar;
29
- ptimer_transaction_begin(s->timer_cmp);
25
uint64_t features;
30
- ptimer_transaction_begin(s->timer_reload);
26
uint32_t target;
31
27
const char *dtb_compatible;
32
oldcr = s->cr;
28
diff --git a/target/arm/kvm.c b/target/arm/kvm.c
33
s->cr = value & 0x03ffffff;
29
index XXXXXXX..XXXXXXX 100644
34
if (s->cr & CR_SWR) {
30
--- a/target/arm/kvm.c
35
/* handle the reset */
31
+++ b/target/arm/kvm.c
36
imx_epit_reset(DEVICE(s));
32
@@ -XXX,XX +XXX,XX @@ void kvm_arm_set_cpu_features_from_host(ARMCPU *cpu)
37
- } else {
33
38
+ /*
34
cpu->kvm_target = arm_host_cpu_features.target;
39
+ * TODO: could we 'break' here? following operations appear
35
cpu->dtb_compatible = arm_host_cpu_features.dtb_compatible;
40
+ * to duplicate the work imx_epit_reset() already did.
36
+ cpu->isar = arm_host_cpu_features.isar;
41
+ */
37
env->features = arm_host_cpu_features.features;
42
+ }
38
}
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
}
39
50
40
--
51
--
41
2.19.1
52
2.20.1
42
53
43
54
diff view generated by jsdifflib
Deleted patch
1
From: Richard Henderson <richard.henderson@linaro.org>
2
1
3
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
Message-id: 20181113180154.17903-5-richard.henderson@linaro.org
5
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
6
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
7
---
8
target/arm/kvm32.c | 40 +++++++++++++++++++++++++++++++++++-----
9
1 file changed, 35 insertions(+), 5 deletions(-)
10
11
diff --git a/target/arm/kvm32.c b/target/arm/kvm32.c
12
index XXXXXXX..XXXXXXX 100644
13
--- a/target/arm/kvm32.c
14
+++ b/target/arm/kvm32.c
15
@@ -XXX,XX +XXX,XX @@ bool kvm_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf)
16
* and then query that CPU for the relevant ID registers.
17
*/
18
int err = 0, fdarray[3];
19
- uint32_t midr, id_pfr0, mvfr1;
20
+ uint32_t midr, id_pfr0;
21
uint64_t features = 0;
22
23
/* Old kernels may not know about the PREFERRED_TARGET ioctl: however
24
@@ -XXX,XX +XXX,XX @@ bool kvm_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf)
25
26
err |= read_sys_reg32(fdarray[2], &midr, ARM_CP15_REG32(0, 0, 0, 0));
27
err |= read_sys_reg32(fdarray[2], &id_pfr0, ARM_CP15_REG32(0, 0, 1, 0));
28
- err |= read_sys_reg32(fdarray[2], &mvfr1,
29
+
30
+ err |= read_sys_reg32(fdarray[2], &ahcf->isar.id_isar0,
31
+ ARM_CP15_REG32(0, 0, 2, 0));
32
+ err |= read_sys_reg32(fdarray[2], &ahcf->isar.id_isar1,
33
+ ARM_CP15_REG32(0, 0, 2, 1));
34
+ err |= read_sys_reg32(fdarray[2], &ahcf->isar.id_isar2,
35
+ ARM_CP15_REG32(0, 0, 2, 2));
36
+ err |= read_sys_reg32(fdarray[2], &ahcf->isar.id_isar3,
37
+ ARM_CP15_REG32(0, 0, 2, 3));
38
+ err |= read_sys_reg32(fdarray[2], &ahcf->isar.id_isar4,
39
+ ARM_CP15_REG32(0, 0, 2, 4));
40
+ err |= read_sys_reg32(fdarray[2], &ahcf->isar.id_isar5,
41
+ ARM_CP15_REG32(0, 0, 2, 5));
42
+ if (read_sys_reg32(fdarray[2], &ahcf->isar.id_isar6,
43
+ ARM_CP15_REG32(0, 0, 2, 7))) {
44
+ /*
45
+ * Older kernels don't support reading ID_ISAR6. This register was
46
+ * only introduced in ARMv8, so we can assume that it is zero on a
47
+ * CPU that a kernel this old is running on.
48
+ */
49
+ ahcf->isar.id_isar6 = 0;
50
+ }
51
+
52
+ err |= read_sys_reg32(fdarray[2], &ahcf->isar.mvfr0,
53
+ KVM_REG_ARM | KVM_REG_SIZE_U32 |
54
+ KVM_REG_ARM_VFP | KVM_REG_ARM_VFP_MVFR0);
55
+ err |= read_sys_reg32(fdarray[2], &ahcf->isar.mvfr1,
56
KVM_REG_ARM | KVM_REG_SIZE_U32 |
57
KVM_REG_ARM_VFP | KVM_REG_ARM_VFP_MVFR1);
58
+ /*
59
+ * FIXME: There is not yet a way to read MVFR2.
60
+ * Fortunately there is not yet anything in there that affects migration.
61
+ */
62
63
kvm_arm_destroy_scratch_host_vcpu(fdarray);
64
65
@@ -XXX,XX +XXX,XX @@ bool kvm_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf)
66
if (extract32(id_pfr0, 12, 4) == 1) {
67
set_feature(&features, ARM_FEATURE_THUMB2EE);
68
}
69
- if (extract32(mvfr1, 20, 4) == 1) {
70
+ if (extract32(ahcf->isar.mvfr1, 20, 4) == 1) {
71
set_feature(&features, ARM_FEATURE_VFP_FP16);
72
}
73
- if (extract32(mvfr1, 12, 4) == 1) {
74
+ if (extract32(ahcf->isar.mvfr1, 12, 4) == 1) {
75
set_feature(&features, ARM_FEATURE_NEON);
76
}
77
- if (extract32(mvfr1, 28, 4) == 1) {
78
+ if (extract32(ahcf->isar.mvfr1, 28, 4) == 1) {
79
/* FMAC support implies VFPv4 */
80
set_feature(&features, ARM_FEATURE_VFP4);
81
}
82
--
83
2.19.1
84
85
diff view generated by jsdifflib
Deleted patch
1
From: Thomas Huth <thuth@redhat.com>
2
1
3
Add entries for the boards "mcimx6ul-evk", "mcimx7d-sabre", "raspi2",
4
"raspi3", "sabrelite", "vexpress-a15", "vexpress-a9" and "virt".
5
While we're at it, also adjust the "i.MX31" section a little bit,
6
so that the wildcards there do not match anymore for unrelated files
7
(e.g. the new hw/misc/imx6ul_ccm.c file).
8
9
Signed-off-by: Thomas Huth <thuth@redhat.com>
10
Message-id: 1542184999-11145-1-git-send-email-thuth@redhat.com
11
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
12
---
13
MAINTAINERS | 70 +++++++++++++++++++++++++++++++++++++++++++++++++----
14
1 file changed, 65 insertions(+), 5 deletions(-)
15
16
diff --git a/MAINTAINERS b/MAINTAINERS
17
index XXXXXXX..XXXXXXX 100644
18
--- a/MAINTAINERS
19
+++ b/MAINTAINERS
20
@@ -XXX,XX +XXX,XX @@ L: qemu-arm@nongnu.org
21
S: Odd Fixes
22
F: hw/arm/gumstix.c
23
24
-i.MX31
25
+i.MX31 (kzm)
26
M: Peter Chubb <peter.chubb@nicta.com.au>
27
L: qemu-arm@nongnu.org
28
-S: Odd fixes
29
-F: hw/*/imx*
30
-F: include/hw/*/imx*
31
+S: Odd Fixes
32
F: hw/arm/kzm.c
33
-F: include/hw/arm/fsl-imx31.h
34
+F: hw/*/imx_*
35
+F: hw/*/*imx31*
36
+F: include/hw/*/imx_*
37
+F: include/hw/*/*imx31*
38
39
Integrator CP
40
M: Peter Maydell <peter.maydell@linaro.org>
41
@@ -XXX,XX +XXX,XX @@ S: Maintained
42
F: hw/arm/integratorcp.c
43
F: hw/misc/arm_integrator_debug.c
44
45
+MCIMX6UL EVK / i.MX6ul
46
+M: Peter Maydell <peter.maydell@linaro.org>
47
+R: Jean-Christophe Dubois <jcd@tribudubois.net>
48
+L: qemu-arm@nongnu.org
49
+S: Odd Fixes
50
+F: hw/arm/mcimx6ul-evk.c
51
+F: hw/arm/fsl-imx6ul.c
52
+F: hw/misc/imx6ul_ccm.c
53
+F: include/hw/arm/fsl-imx6ul.h
54
+F: include/hw/misc/imx6ul_ccm.h
55
+
56
+MCIMX7D SABRE / i.MX7
57
+M: Peter Maydell <peter.maydell@linaro.org>
58
+R: Andrey Smirnov <andrew.smirnov@gmail.com>
59
+L: qemu-arm@nongnu.org
60
+S: Odd Fixes
61
+F: hw/arm/mcimx7d-sabre.c
62
+F: hw/arm/fsl-imx7.c
63
+F: include/hw/arm/fsl-imx7.h
64
+F: hw/pci-host/designware.c
65
+F: include/hw/pci-host/designware.h
66
+
67
MPS2
68
M: Peter Maydell <peter.maydell@linaro.org>
69
L: qemu-arm@nongnu.org
70
@@ -XXX,XX +XXX,XX @@ L: qemu-arm@nongnu.org
71
S: Maintained
72
F: hw/arm/palm.c
73
74
+Raspberry Pi
75
+M: Peter Maydell <peter.maydell@linaro.org>
76
+R: Andrew Baumann <Andrew.Baumann@microsoft.com>
77
+R: Philippe Mathieu-Daudé <f4bug@amsat.org>
78
+L: qemu-arm@nongnu.org
79
+S: Odd Fixes
80
+F: hw/arm/raspi_platform.h
81
+F: hw/*/bcm283*
82
+F: include/hw/arm/raspi*
83
+F: include/hw/*/bcm283*
84
+
85
Real View
86
M: Peter Maydell <peter.maydell@linaro.org>
87
L: qemu-arm@nongnu.org
88
@@ -XXX,XX +XXX,XX @@ F: hw/*/pxa2xx*
89
F: hw/misc/mst_fpga.c
90
F: include/hw/arm/pxa.h
91
92
+SABRELITE / i.MX6
93
+M: Peter Maydell <peter.maydell@linaro.org>
94
+R: Jean-Christophe Dubois <jcd@tribudubois.net>
95
+L: qemu-arm@nongnu.org
96
+S: Odd Fixes
97
+F: hw/arm/sabrelite.c
98
+F: hw/arm/fsl-imx6.c
99
+F: hw/misc/imx6_src.c
100
+F: hw/ssi/imx_spi.c
101
+F: include/hw/arm/fsl-imx6.h
102
+F: include/hw/misc/imx6_src.h
103
+F: include/hw/ssi/imx_spi.h
104
+
105
Sharp SL-5500 (Collie) PDA
106
M: Peter Maydell <peter.maydell@linaro.org>
107
L: qemu-arm@nongnu.org
108
@@ -XXX,XX +XXX,XX @@ L: qemu-arm@nongnu.org
109
S: Maintained
110
F: hw/*/stellaris*
111
112
+Versatile Express
113
+M: Peter Maydell <peter.maydell@linaro.org>
114
+L: qemu-arm@nongnu.org
115
+S: Maintained
116
+F: hw/arm/vexpress.c
117
+
118
Versatile PB
119
M: Peter Maydell <peter.maydell@linaro.org>
120
L: qemu-arm@nongnu.org
121
@@ -XXX,XX +XXX,XX @@ S: Maintained
122
F: hw/*/versatile*
123
F: hw/misc/arm_sysctl.c
124
125
+Virt
126
+M: Peter Maydell <peter.maydell@linaro.org>
127
+L: qemu-arm@nongnu.org
128
+S: Maintained
129
+F: hw/arm/virt*
130
+F: include/hw/arm/virt.h
131
+
132
Xilinx Zynq
133
M: Edgar E. Iglesias <edgar.iglesias@gmail.com>
134
M: Alistair Francis <alistair@alistair23.me>
135
--
136
2.19.1
137
138
diff view generated by jsdifflib