1
target-arm queue: nothing big, just a collection of minor things.
1
Hi; here's the first target-arm pullreq for the 7.0 cycle.
2
2
3
thanks
3
-- PMM
4
-- PMM
4
5
5
The following changes since commit ae3aa5da96f4ccf0c2a28851449d92db9fcfad71:
6
The following changes since commit 76b56fdfc9fa43ec6e5986aee33f108c6c6a511e:
6
7
7
Merge remote-tracking branch 'remotes/berrange/tags/socket-next-pull-request' into staging (2020-05-21 16:47:28 +0100)
8
Merge tag 'block-pull-request' of https://gitlab.com/stefanha/qemu into staging (2021-12-14 12:46:18 -0800)
8
9
9
are available in the Git repository at:
10
are available in the Git repository at:
10
11
11
https://git.linaro.org/people/pmaydell/qemu-arm.git tags/pull-target-arm-20200521
12
https://git.linaro.org/people/pmaydell/qemu-arm.git tags/pull-target-arm-20211215
12
13
13
for you to fetch changes up to 17b5df7b65d0192c5d775b5e1581518580774c77:
14
for you to fetch changes up to aed176558806674d030a8305d989d4e6a5073359:
14
15
15
linux-user/arm/signal.c: Drop TARGET_CONFIG_CPU_32 (2020-05-21 20:00:19 +0100)
16
tests/acpi: add expected blob for VIOT test on virt machine (2021-12-15 10:35:26 +0000)
16
17
17
----------------------------------------------------------------
18
----------------------------------------------------------------
18
target-arm queue:
19
target-arm queue:
19
* tests/acceptance: Add a test for the canon-a1100 machine
20
* ITS: error reporting cleanup
20
* docs/system: Document some of the Arm development boards
21
* aspeed: improve documentation
21
* linux-user: make BKPT insn cause SIGTRAP, not be a syscall
22
* Fix STM32F2XX USART data register readout
22
* target/arm: Remove unused GEN_NEON_INTEGER_OP macro
23
* allow emulated GICv3 to be disabled in non-TCG builds
23
* fsl-imx25, fsl-imx31, fsl-imx6, fsl-imx6ul, fsl-imx7: implement watchdog
24
* fix exception priority for singlestep, misaligned PC, bp, etc
24
* hw/arm: Use qemu_log_mask() instead of hw_error() in various places
25
* Correct calculation of tlb range invalidate length
25
* ARM: PL061: Introduce N_GPIOS
26
* npcm7xx_emc: fix missing queue_flush
26
* target/arm: Improve clear_vec_high() usage
27
* virt: Add VIOT ACPI table for virtio-iommu
27
* target/arm: Allow user-mode code to write CPSR.E via MSR
28
* target/i386: Use assert() to sanity-check b1 in SSE decode
28
* linux-user/arm: Reset CPSR_E when entering a signal handler
29
* Don't include qemu-common unnecessarily
29
* linux-user/arm/signal.c: Drop TARGET_CONFIG_CPU_32
30
30
31
----------------------------------------------------------------
31
----------------------------------------------------------------
32
Amanieu d'Antras (1):
32
Alex Bennée (1):
33
linux-user/arm: Reset CPSR_E when entering a signal handler
33
hw/intc: clean-up error reporting for failed ITS cmd
34
34
35
Geert Uytterhoeven (1):
35
Jean-Philippe Brucker (8):
36
ARM: PL061: Introduce N_GPIOS
36
hw/arm/virt-acpi-build: Add VIOT table for virtio-iommu
37
hw/arm/virt: Remove device tree restriction for virtio-iommu
38
hw/arm/virt: Reject instantiation of multiple IOMMUs
39
hw/arm/virt: Use object_property_set instead of qdev_prop_set
40
tests/acpi: allow updates of VIOT expected data files
41
tests/acpi: add test case for VIOT
42
tests/acpi: add expected blobs for VIOT test on q35 machine
43
tests/acpi: add expected blob for VIOT test on virt machine
37
44
38
Guenter Roeck (8):
45
Joel Stanley (4):
39
hw: Move i.MX watchdog driver to hw/watchdog
46
docs: aspeed: Add new boards
40
hw/watchdog: Implement full i.MX watchdog support
47
docs: aspeed: Update OpenBMC image URL
41
hw/arm/fsl-imx25: Wire up watchdog
48
docs: aspeed: Give an example of booting a kernel
42
hw/arm/fsl-imx31: Wire up watchdog
49
docs: aspeed: ADC is now modelled
43
hw/arm/fsl-imx6: Connect watchdog interrupts
44
hw/arm/fsl-imx6ul: Connect watchdog interrupts
45
hw/arm/fsl-imx7: Instantiate various unimplemented devices
46
hw/arm/fsl-imx7: Connect watchdog interrupts
47
50
48
Peter Maydell (12):
51
Olivier Hériveaux (1):
49
docs/system: Add 'Arm' to the Integrator/CP document title
52
Fix STM32F2XX USART data register readout
50
docs/system: Sort Arm board index into alphabetical order
51
docs/system: Document Arm Versatile Express boards
52
docs/system: Document the various MPS2 models
53
docs/system: Document Musca boards
54
linux-user/arm: BKPT should cause SIGTRAP, not be a syscall
55
linux-user/arm: Remove bogus SVC 0xf0002 handling
56
linux-user/arm: Handle invalid arm-specific syscalls correctly
57
linux-user/arm: Fix identification of syscall numbers
58
target/arm: Remove unused GEN_NEON_INTEGER_OP macro
59
target/arm: Allow user-mode code to write CPSR.E via MSR
60
linux-user/arm/signal.c: Drop TARGET_CONFIG_CPU_32
61
53
62
Philippe Mathieu-Daudé (4):
54
Patrick Venture (1):
63
hw/arm/integratorcp: Replace hw_error() by qemu_log_mask()
55
hw/net: npcm7xx_emc fix missing queue_flush
64
hw/arm/pxa2xx: Replace hw_error() by qemu_log_mask()
65
hw/char/xilinx_uartlite: Replace hw_error() by qemu_log_mask()
66
hw/timer/exynos4210_mct: Replace hw_error() by qemu_log_mask()
67
56
68
Richard Henderson (2):
57
Peter Maydell (6):
69
target/arm: Use tcg_gen_gvec_mov for clear_vec_high
58
target/i386: Use assert() to sanity-check b1 in SSE decode
70
target/arm: Use clear_vec_high more effectively
59
include/hw/i386: Don't include qemu-common.h in .h files
60
target/hexagon/cpu.h: don't include qemu-common.h
61
target/rx/cpu.h: Don't include qemu-common.h
62
hw/arm: Don't include qemu-common.h unnecessarily
63
target/arm: Correct calculation of tlb range invalidate length
71
64
72
Thomas Huth (1):
65
Philippe Mathieu-Daudé (2):
73
tests/acceptance: Add a test for the canon-a1100 machine
66
hw/intc/arm_gicv3: Extract gicv3_set_gicv3state from arm_gicv3_cpuif.c
67
hw/intc/arm_gicv3: Introduce CONFIG_ARM_GIC_TCG Kconfig selector
74
68
75
docs/system/arm/integratorcp.rst | 4 +-
69
Richard Henderson (10):
76
docs/system/arm/mps2.rst | 29 +++
70
target/arm: Hoist pc_next to a local variable in aarch64_tr_translate_insn
77
docs/system/arm/musca.rst | 31 +++
71
target/arm: Hoist pc_next to a local variable in arm_tr_translate_insn
78
docs/system/arm/vexpress.rst | 60 ++++++
72
target/arm: Hoist pc_next to a local variable in thumb_tr_translate_insn
79
docs/system/target-arm.rst | 20 +-
73
target/arm: Split arm_pre_translate_insn
80
include/hw/arm/fsl-imx25.h | 5 +
74
target/arm: Advance pc for arch single-step exception
81
include/hw/arm/fsl-imx31.h | 4 +
75
target/arm: Split compute_fsr_fsc out of arm_deliver_fault
82
include/hw/arm/fsl-imx6.h | 2 +-
76
target/arm: Take an exception if PC is misaligned
83
include/hw/arm/fsl-imx6ul.h | 2 +-
77
target/arm: Assert thumb pc is aligned
84
include/hw/arm/fsl-imx7.h | 23 ++-
78
target/arm: Suppress bp for exceptions with more priority
85
include/hw/misc/imx2_wdt.h | 33 ----
79
tests/tcg: Add arm and aarch64 pc alignment tests
86
include/hw/watchdog/wdt_imx2.h | 90 +++++++++
87
target/arm/cpu.h | 2 +-
88
hw/arm/fsl-imx25.c | 10 +
89
hw/arm/fsl-imx31.c | 6 +
90
hw/arm/fsl-imx6.c | 9 +
91
hw/arm/fsl-imx6ul.c | 10 +
92
hw/arm/fsl-imx7.c | 35 ++++
93
hw/arm/integratorcp.c | 23 ++-
94
hw/arm/pxa2xx_gpio.c | 7 +-
95
hw/char/xilinx_uartlite.c | 5 +-
96
hw/display/pxa2xx_lcd.c | 8 +-
97
hw/dma/pxa2xx_dma.c | 14 +-
98
hw/gpio/pl061.c | 12 +-
99
hw/misc/imx2_wdt.c | 90 ---------
100
hw/timer/exynos4210_mct.c | 12 +-
101
hw/watchdog/wdt_imx2.c | 303 +++++++++++++++++++++++++++++
102
linux-user/arm/cpu_loop.c | 145 ++++++++------
103
linux-user/arm/signal.c | 15 +-
104
target/arm/translate-a64.c | 63 +++---
105
target/arm/translate.c | 23 ---
106
MAINTAINERS | 6 +
107
hw/arm/Kconfig | 5 +
108
hw/misc/Makefile.objs | 1 -
109
hw/watchdog/Kconfig | 3 +
110
hw/watchdog/Makefile.objs | 1 +
111
tests/acceptance/machine_arm_canona1100.py | 35 ++++
112
37 files changed, 854 insertions(+), 292 deletions(-)
113
create mode 100644 docs/system/arm/mps2.rst
114
create mode 100644 docs/system/arm/musca.rst
115
create mode 100644 docs/system/arm/vexpress.rst
116
delete mode 100644 include/hw/misc/imx2_wdt.h
117
create mode 100644 include/hw/watchdog/wdt_imx2.h
118
delete mode 100644 hw/misc/imx2_wdt.c
119
create mode 100644 hw/watchdog/wdt_imx2.c
120
create mode 100644 tests/acceptance/machine_arm_canona1100.py
121
80
81
docs/system/arm/aspeed.rst | 26 ++++++++++++----
82
include/hw/i386/microvm.h | 1 -
83
include/hw/i386/x86.h | 1 -
84
target/arm/helper.h | 1 +
85
target/arm/syndrome.h | 5 +++
86
target/hexagon/cpu.h | 1 -
87
target/rx/cpu.h | 1 -
88
hw/arm/boot.c | 1 -
89
hw/arm/digic_boards.c | 1 -
90
hw/arm/highbank.c | 1 -
91
hw/arm/npcm7xx_boards.c | 1 -
92
hw/arm/sbsa-ref.c | 1 -
93
hw/arm/stm32f405_soc.c | 1 -
94
hw/arm/vexpress.c | 1 -
95
hw/arm/virt-acpi-build.c | 7 +++++
96
hw/arm/virt.c | 21 ++++++-------
97
hw/char/stm32f2xx_usart.c | 3 +-
98
hw/intc/arm_gicv3.c | 2 +-
99
hw/intc/arm_gicv3_cpuif.c | 10 +-----
100
hw/intc/arm_gicv3_cpuif_common.c | 22 +++++++++++++
101
hw/intc/arm_gicv3_its.c | 39 +++++++++++++++--------
102
hw/net/npcm7xx_emc.c | 18 +++++------
103
hw/virtio/virtio-iommu-pci.c | 12 ++------
104
linux-user/aarch64/cpu_loop.c | 46 ++++++++++++++++------------
105
linux-user/hexagon/cpu_loop.c | 1 +
106
target/arm/debug_helper.c | 23 ++++++++++++++
107
target/arm/gdbstub.c | 9 ++++--
108
target/arm/helper.c | 6 ++--
109
target/arm/machine.c | 10 ++++++
110
target/arm/tlb_helper.c | 63 ++++++++++++++++++++++++++++----------
111
target/arm/translate-a64.c | 23 ++++++++++++--
112
target/arm/translate.c | 58 ++++++++++++++++++++++++++---------
113
target/i386/tcg/translate.c | 12 ++------
114
tests/qtest/bios-tables-test.c | 38 +++++++++++++++++++++++
115
tests/tcg/aarch64/pcalign-a64.c | 37 ++++++++++++++++++++++
116
tests/tcg/arm/pcalign-a32.c | 46 ++++++++++++++++++++++++++++
117
hw/arm/Kconfig | 1 +
118
hw/intc/Kconfig | 5 +++
119
hw/intc/meson.build | 11 ++++---
120
tests/data/acpi/q35/DSDT.viot | Bin 0 -> 9398 bytes
121
tests/data/acpi/q35/VIOT.viot | Bin 0 -> 112 bytes
122
tests/data/acpi/virt/VIOT | Bin 0 -> 88 bytes
123
tests/tcg/aarch64/Makefile.target | 4 +--
124
tests/tcg/arm/Makefile.target | 4 +++
125
44 files changed, 429 insertions(+), 145 deletions(-)
126
create mode 100644 hw/intc/arm_gicv3_cpuif_common.c
127
create mode 100644 tests/tcg/aarch64/pcalign-a64.c
128
create mode 100644 tests/tcg/arm/pcalign-a32.c
129
create mode 100644 tests/data/acpi/q35/DSDT.viot
130
create mode 100644 tests/data/acpi/q35/VIOT.viot
131
create mode 100644 tests/data/acpi/virt/VIOT
132
diff view generated by jsdifflib
New patch
1
From: Alex Bennée <alex.bennee@linaro.org>
1
2
3
While trying to debug a GIC ITS failure I saw some guest errors that
4
had poor formatting as well as leaving me confused as to what failed.
5
As most of the checks aren't possible without a valid dte split that
6
check apart and then check the other conditions in steps. This avoids
7
us relying on undefined data.
8
9
I still get a failure with the current kvm-unit-tests but at least I
10
know (partially) why now:
11
12
Exception return from AArch64 EL1 to AArch64 EL1 PC 0x40080588
13
PASS: gicv3: its-trigger: inv/invall: dev2/eventid=20 now triggers an LPI
14
ITS: MAPD devid=2 size = 0x8 itt=0x40430000 valid=0
15
INT dev_id=2 event_id=20
16
process_its_cmd: invalid command attributes: invalid dte: 0 for 2 (MEM_TX: 0)
17
PASS: gicv3: its-trigger: mapd valid=false: no LPI after device unmap
18
SUMMARY: 6 tests, 1 unexpected failures
19
20
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
21
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
22
Message-id: 20211112170454.3158925-1-alex.bennee@linaro.org
23
Cc: Shashi Mallela <shashi.mallela@linaro.org>
24
Cc: Peter Maydell <peter.maydell@linaro.org>
25
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
26
---
27
hw/intc/arm_gicv3_its.c | 39 +++++++++++++++++++++++++++------------
28
1 file changed, 27 insertions(+), 12 deletions(-)
29
30
diff --git a/hw/intc/arm_gicv3_its.c b/hw/intc/arm_gicv3_its.c
31
index XXXXXXX..XXXXXXX 100644
32
--- a/hw/intc/arm_gicv3_its.c
33
+++ b/hw/intc/arm_gicv3_its.c
34
@@ -XXX,XX +XXX,XX @@ static bool process_its_cmd(GICv3ITSState *s, uint64_t value, uint32_t offset,
35
if (res != MEMTX_OK) {
36
return result;
37
}
38
+ } else {
39
+ qemu_log_mask(LOG_GUEST_ERROR,
40
+ "%s: invalid command attributes: "
41
+ "invalid dte: %"PRIx64" for %d (MEM_TX: %d)\n",
42
+ __func__, dte, devid, res);
43
+ return result;
44
}
45
46
- if ((devid > s->dt.maxids.max_devids) || !dte_valid || !ite_valid ||
47
- !cte_valid || (eventid > max_eventid)) {
48
+
49
+ /*
50
+ * In this implementation, in case of guest errors we ignore the
51
+ * command and move onto the next command in the queue.
52
+ */
53
+ if (devid > s->dt.maxids.max_devids) {
54
qemu_log_mask(LOG_GUEST_ERROR,
55
- "%s: invalid command attributes "
56
- "devid %d or eventid %d or invalid dte %d or"
57
- "invalid cte %d or invalid ite %d\n",
58
- __func__, devid, eventid, dte_valid, cte_valid,
59
- ite_valid);
60
- /*
61
- * in this implementation, in case of error
62
- * we ignore this command and move onto the next
63
- * command in the queue
64
- */
65
+ "%s: invalid command attributes: devid %d>%d",
66
+ __func__, devid, s->dt.maxids.max_devids);
67
+
68
+ } else if (!dte_valid || !ite_valid || !cte_valid) {
69
+ qemu_log_mask(LOG_GUEST_ERROR,
70
+ "%s: invalid command attributes: "
71
+ "dte: %s, ite: %s, cte: %s\n",
72
+ __func__,
73
+ dte_valid ? "valid" : "invalid",
74
+ ite_valid ? "valid" : "invalid",
75
+ cte_valid ? "valid" : "invalid");
76
+ } else if (eventid > max_eventid) {
77
+ qemu_log_mask(LOG_GUEST_ERROR,
78
+ "%s: invalid command attributes: eventid %d > %d\n",
79
+ __func__, eventid, max_eventid);
80
} else {
81
/*
82
* Current implementation only supports rdbase == procnum
83
--
84
2.25.1
85
86
diff view generated by jsdifflib
New patch
1
From: Joel Stanley <joel@jms.id.au>
1
2
3
Add X11, FP5280G2, G220A, Rainier and Fuji. Mention that Swift will be
4
removed in v7.0.
5
6
Signed-off-by: Joel Stanley <joel@jms.id.au>
7
Reviewed-by: Cédric Le Goater <clg@kaod.org>
8
Message-id: 20211117065752.330632-2-joel@jms.id.au
9
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
10
---
11
docs/system/arm/aspeed.rst | 7 ++++++-
12
1 file changed, 6 insertions(+), 1 deletion(-)
13
14
diff --git a/docs/system/arm/aspeed.rst b/docs/system/arm/aspeed.rst
15
index XXXXXXX..XXXXXXX 100644
16
--- a/docs/system/arm/aspeed.rst
17
+++ b/docs/system/arm/aspeed.rst
18
@@ -XXX,XX +XXX,XX @@ AST2400 SoC based machines :
19
20
- ``palmetto-bmc`` OpenPOWER Palmetto POWER8 BMC
21
- ``quanta-q71l-bmc`` OpenBMC Quanta BMC
22
+- ``supermicrox11-bmc`` Supermicro X11 BMC
23
24
AST2500 SoC based machines :
25
26
@@ -XXX,XX +XXX,XX @@ AST2500 SoC based machines :
27
- ``romulus-bmc`` OpenPOWER Romulus POWER9 BMC
28
- ``witherspoon-bmc`` OpenPOWER Witherspoon POWER9 BMC
29
- ``sonorapass-bmc`` OCP SonoraPass BMC
30
-- ``swift-bmc`` OpenPOWER Swift BMC POWER9
31
+- ``swift-bmc`` OpenPOWER Swift BMC POWER9 (to be removed in v7.0)
32
+- ``fp5280g2-bmc`` Inspur FP5280G2 BMC
33
+- ``g220a-bmc`` Bytedance G220A BMC
34
35
AST2600 SoC based machines :
36
37
- ``ast2600-evb`` Aspeed AST2600 Evaluation board (Cortex-A7)
38
- ``tacoma-bmc`` OpenPOWER Witherspoon POWER9 AST2600 BMC
39
+- ``rainier-bmc`` IBM Rainier POWER10 BMC
40
+- ``fuji-bmc`` Facebook Fuji BMC
41
42
Supported devices
43
-----------------
44
--
45
2.25.1
46
47
diff view generated by jsdifflib
1
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
1
From: Joel Stanley <joel@jms.id.au>
2
2
3
hw_error() calls exit(). This a bit overkill when we can log
3
This is the latest URL for the OpenBMC CI. The old URL still works, but
4
the accesses as unimplemented or guest error.
4
redirects.
5
5
6
When fuzzing the devices, we don't want the whole process to
6
Reviewed-by: Cédric Le Goater <clg@kaod.org>
7
exit. Replace some hw_error() calls by qemu_log_mask().
7
Signed-off-by: Joel Stanley <joel@jms.id.au>
8
8
Message-id: 20211117065752.330632-3-joel@jms.id.au
9
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
10
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
11
Message-id: 20200518140309.5220-2-f4bug@amsat.org
12
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
9
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
13
---
10
---
14
hw/arm/integratorcp.c | 23 +++++++++++++++--------
11
docs/system/arm/aspeed.rst | 2 +-
15
1 file changed, 15 insertions(+), 8 deletions(-)
12
1 file changed, 1 insertion(+), 1 deletion(-)
16
13
17
diff --git a/hw/arm/integratorcp.c b/hw/arm/integratorcp.c
14
diff --git a/docs/system/arm/aspeed.rst b/docs/system/arm/aspeed.rst
18
index XXXXXXX..XXXXXXX 100644
15
index XXXXXXX..XXXXXXX 100644
19
--- a/hw/arm/integratorcp.c
16
--- a/docs/system/arm/aspeed.rst
20
+++ b/hw/arm/integratorcp.c
17
+++ b/docs/system/arm/aspeed.rst
21
@@ -XXX,XX +XXX,XX @@
18
@@ -XXX,XX +XXX,XX @@ The Aspeed machines can be started using the ``-kernel`` option to
22
#include "exec/address-spaces.h"
19
load a Linux kernel or from a firmware. Images can be downloaded from
23
#include "sysemu/runstate.h"
20
the OpenBMC jenkins :
24
#include "sysemu/sysemu.h"
21
25
+#include "qemu/log.h"
22
- https://jenkins.openbmc.org/job/ci-openbmc/lastSuccessfulBuild/distro=ubuntu,label=docker-builder
26
#include "qemu/error-report.h"
23
+ https://jenkins.openbmc.org/job/ci-openbmc/lastSuccessfulBuild/
27
#include "hw/char/pl011.h"
24
28
#include "hw/hw.h"
25
or directly from the OpenBMC GitHub release repository :
29
@@ -XXX,XX +XXX,XX @@ static uint64_t integratorcm_read(void *opaque, hwaddr offset,
30
/* ??? Voltage control unimplemented. */
31
return 0;
32
default:
33
- hw_error("integratorcm_read: Unimplemented offset 0x%x\n",
34
- (int)offset);
35
+ qemu_log_mask(LOG_UNIMP,
36
+ "%s: Unimplemented offset 0x%" HWADDR_PRIX "\n",
37
+ __func__, offset);
38
return 0;
39
}
40
}
41
@@ -XXX,XX +XXX,XX @@ static void integratorcm_write(void *opaque, hwaddr offset,
42
/* ??? Voltage control unimplemented. */
43
break;
44
default:
45
- hw_error("integratorcm_write: Unimplemented offset 0x%x\n",
46
- (int)offset);
47
+ qemu_log_mask(LOG_UNIMP,
48
+ "%s: Unimplemented offset 0x%" HWADDR_PRIX "\n",
49
+ __func__, offset);
50
break;
51
}
52
}
53
@@ -XXX,XX +XXX,XX @@ static uint64_t icp_pic_read(void *opaque, hwaddr offset,
54
case 5: /* INT_SOFTCLR */
55
case 11: /* FRQ_ENABLECLR */
56
default:
57
- printf ("icp_pic_read: Bad register offset 0x%x\n", (int)offset);
58
+ qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad offset 0x%" HWADDR_PRIX "\n",
59
+ __func__, offset);
60
return 0;
61
}
62
}
63
@@ -XXX,XX +XXX,XX @@ static void icp_pic_write(void *opaque, hwaddr offset,
64
case 8: /* FRQ_STATUS */
65
case 9: /* FRQ_RAWSTAT */
66
default:
67
- printf ("icp_pic_write: Bad register offset 0x%x\n", (int)offset);
68
+ qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad offset 0x%" HWADDR_PRIX "\n",
69
+ __func__, offset);
70
return;
71
}
72
icp_pic_update(s);
73
@@ -XXX,XX +XXX,XX @@ static uint64_t icp_control_read(void *opaque, hwaddr offset,
74
case 3: /* CP_DECODE */
75
return 0x11;
76
default:
77
- hw_error("icp_control_read: Bad offset %x\n", (int)offset);
78
+ qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad offset 0x%" HWADDR_PRIX "\n",
79
+ __func__, offset);
80
return 0;
81
}
82
}
83
@@ -XXX,XX +XXX,XX @@ static void icp_control_write(void *opaque, hwaddr offset,
84
/* Nothing interesting implemented yet. */
85
break;
86
default:
87
- hw_error("icp_control_write: Bad offset %x\n", (int)offset);
88
+ qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad offset 0x%" HWADDR_PRIX "\n",
89
+ __func__, offset);
90
}
91
}
92
26
93
--
27
--
94
2.20.1
28
2.25.1
95
29
96
30
diff view generated by jsdifflib
1
From: Amanieu d'Antras <amanieu@gmail.com>
1
From: Joel Stanley <joel@jms.id.au>
2
2
3
This fixes signal handlers running with the wrong endianness if the
3
A common use case for the ASPEED machine is to boot a Linux kernel.
4
interrupted code used SETEND to dynamically switch endianness.
4
Provide a full example command line.
5
5
6
Signed-off-by: Amanieu d'Antras <amanieu@gmail.com>
6
Reviewed-by: Cédric Le Goater <clg@kaod.org>
7
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
7
Signed-off-by: Joel Stanley <joel@jms.id.au>
8
Message-id: 20200511131117.2486486-1-amanieu@gmail.com
8
Message-id: 20211117065752.330632-4-joel@jms.id.au
9
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
9
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
10
---
10
---
11
linux-user/arm/signal.c | 8 +++++++-
11
docs/system/arm/aspeed.rst | 15 ++++++++++++---
12
1 file changed, 7 insertions(+), 1 deletion(-)
12
1 file changed, 12 insertions(+), 3 deletions(-)
13
13
14
diff --git a/linux-user/arm/signal.c b/linux-user/arm/signal.c
14
diff --git a/docs/system/arm/aspeed.rst b/docs/system/arm/aspeed.rst
15
index XXXXXXX..XXXXXXX 100644
15
index XXXXXXX..XXXXXXX 100644
16
--- a/linux-user/arm/signal.c
16
--- a/docs/system/arm/aspeed.rst
17
+++ b/linux-user/arm/signal.c
17
+++ b/docs/system/arm/aspeed.rst
18
@@ -XXX,XX +XXX,XX @@ setup_return(CPUARMState *env, struct target_sigaction *ka,
18
@@ -XXX,XX +XXX,XX @@ Missing devices
19
} else {
19
Boot options
20
cpsr &= ~CPSR_T;
20
------------
21
}
21
22
+ if (env->cp15.sctlr_el[1] & SCTLR_E0E) {
22
-The Aspeed machines can be started using the ``-kernel`` option to
23
+ cpsr |= CPSR_E;
23
-load a Linux kernel or from a firmware. Images can be downloaded from
24
+ } else {
24
-the OpenBMC jenkins :
25
+ cpsr &= ~CPSR_E;
25
+The Aspeed machines can be started using the ``-kernel`` and ``-dtb`` options
26
+ }
26
+to load a Linux kernel or from a firmware. Images can be downloaded from the
27
27
+OpenBMC jenkins :
28
if (ka->sa_flags & TARGET_SA_RESTORER) {
28
29
if (is_fdpic) {
29
https://jenkins.openbmc.org/job/ci-openbmc/lastSuccessfulBuild/
30
@@ -XXX,XX +XXX,XX @@ setup_return(CPUARMState *env, struct target_sigaction *ka,
30
31
env->regs[13] = frame_addr;
31
@@ -XXX,XX +XXX,XX @@ or directly from the OpenBMC GitHub release repository :
32
env->regs[14] = retcode;
32
33
env->regs[15] = handler & (thumb ? ~1 : ~3);
33
https://github.com/openbmc/openbmc/releases
34
- cpsr_write(env, cpsr, CPSR_IT | CPSR_T, CPSRWriteByInstr);
34
35
+ cpsr_write(env, cpsr, CPSR_IT | CPSR_T | CPSR_E, CPSRWriteByInstr);
35
+To boot a kernel directly from a Linux build tree:
36
+ arm_rebuild_hflags(env);
36
+
37
37
+.. code-block:: bash
38
return 0;
38
+
39
}
39
+ $ qemu-system-arm -M ast2600-evb -nographic \
40
+ -kernel arch/arm/boot/zImage \
41
+ -dtb arch/arm/boot/dts/aspeed-ast2600-evb.dtb \
42
+ -initrd rootfs.cpio
43
+
44
The image should be attached as an MTD drive. Run :
45
46
.. code-block:: bash
40
--
47
--
41
2.20.1
48
2.25.1
42
49
43
50
diff view generated by jsdifflib
1
Our code to identify syscall numbers has some issues:
1
From: Joel Stanley <joel@jms.id.au>
2
* for Thumb mode, we never need the immediate value from the insn,
3
but we always read it anyway
4
* bad immediate values in the svc insn should cause a SIGILL, but we
5
were abort()ing instead (via "goto error")
6
2
7
We can fix both these things by refactoring the code that identifies
3
Move it to the supported list.
8
the syscall number to more closely follow the kernel COMPAT_OABI code:
9
* for Thumb it is always r7
10
* for Arm, if the immediate value is 0, then this is an EABI call
11
with the syscall number in r7
12
* otherwise, we XOR the immediate value with 0x900000
13
(ARM_SYSCALL_BASE for QEMU; __NR_OABI_SYSCALL_BASE in the kernel),
14
which converts valid syscall immediates into the desired value,
15
and puts all invalid immediates in the range 0x100000 or above
16
* then we can just let the existing "value too large, deliver
17
SIGILL" case handle invalid numbers, and drop the 'goto error'
18
4
5
Signed-off-by: Joel Stanley <joel@jms.id.au>
6
Message-id: 20211117065752.330632-5-joel@jms.id.au
19
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
7
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
20
Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
21
Message-id: 20200420212206.12776-5-peter.maydell@linaro.org
22
---
8
---
23
linux-user/arm/cpu_loop.c | 143 ++++++++++++++++++++------------------
9
docs/system/arm/aspeed.rst | 2 +-
24
1 file changed, 77 insertions(+), 66 deletions(-)
10
1 file changed, 1 insertion(+), 1 deletion(-)
25
11
26
diff --git a/linux-user/arm/cpu_loop.c b/linux-user/arm/cpu_loop.c
12
diff --git a/docs/system/arm/aspeed.rst b/docs/system/arm/aspeed.rst
27
index XXXXXXX..XXXXXXX 100644
13
index XXXXXXX..XXXXXXX 100644
28
--- a/linux-user/arm/cpu_loop.c
14
--- a/docs/system/arm/aspeed.rst
29
+++ b/linux-user/arm/cpu_loop.c
15
+++ b/docs/system/arm/aspeed.rst
30
@@ -XXX,XX +XXX,XX @@ void cpu_loop(CPUARMState *env)
16
@@ -XXX,XX +XXX,XX @@ Supported devices
31
env->eabi = 1;
17
* Front LEDs (PCA9552 on I2C bus)
32
/* system call */
18
* LPC Peripheral Controller (a subset of subdevices are supported)
33
if (env->thumb) {
19
* Hash/Crypto Engine (HACE) - Hash support only. TODO: HMAC and RSA
34
- /* FIXME - what to do if get_user() fails? */
20
+ * ADC
35
- get_user_code_u16(insn, env->regs[15] - 2, env);
21
36
- n = insn & 0xff;
22
37
+ /* Thumb is always EABI style with syscall number in r7 */
23
Missing devices
38
+ n = env->regs[7];
24
---------------
39
} else {
25
40
+ /*
26
* Coprocessor support
41
+ * Equivalent of kernel CONFIG_OABI_COMPAT: read the
27
- * ADC (out of tree implementation)
42
+ * Arm SVC insn to extract the immediate, which is the
28
* PWM and Fan Controller
43
+ * syscall number in OABI.
29
* Slave GPIO Controller
44
+ */
30
* Super I/O Controller
45
/* FIXME - what to do if get_user() fails? */
46
get_user_code_u32(insn, env->regs[15] - 4, env);
47
n = insn & 0xffffff;
48
- }
49
-
50
- if (n == 0 || n >= ARM_SYSCALL_BASE || env->thumb) {
51
- /* linux syscall */
52
- if (env->thumb || n == 0) {
53
+ if (n == 0) {
54
+ /* zero immediate: EABI, syscall number in r7 */
55
n = env->regs[7];
56
} else {
57
- n -= ARM_SYSCALL_BASE;
58
+ /*
59
+ * This XOR matches the kernel code: an immediate
60
+ * in the valid range (0x900000 .. 0x9fffff) is
61
+ * converted into the correct EABI-style syscall
62
+ * number; invalid immediates end up as values
63
+ * > 0xfffff and are handled below as out-of-range.
64
+ */
65
+ n ^= ARM_SYSCALL_BASE;
66
env->eabi = 0;
67
}
68
- if ( n > ARM_NR_BASE) {
69
- switch (n) {
70
- case ARM_NR_cacheflush:
71
- /* nop */
72
- break;
73
- case ARM_NR_set_tls:
74
- cpu_set_tls(env, env->regs[0]);
75
- env->regs[0] = 0;
76
- break;
77
- case ARM_NR_breakpoint:
78
- env->regs[15] -= env->thumb ? 2 : 4;
79
- goto excp_debug;
80
- case ARM_NR_get_tls:
81
- env->regs[0] = cpu_get_tls(env);
82
- break;
83
- default:
84
- if (n < 0xf0800) {
85
- /*
86
- * Syscalls 0xf0000..0xf07ff (or 0x9f0000..
87
- * 0x9f07ff in OABI numbering) are defined
88
- * to return -ENOSYS rather than raising
89
- * SIGILL. Note that we have already
90
- * removed the 0x900000 prefix.
91
- */
92
- qemu_log_mask(LOG_UNIMP,
93
- "qemu: Unsupported ARM syscall: 0x%x\n",
94
- n);
95
- env->regs[0] = -TARGET_ENOSYS;
96
+ }
97
+
98
+ if (n > ARM_NR_BASE) {
99
+ switch (n) {
100
+ case ARM_NR_cacheflush:
101
+ /* nop */
102
+ break;
103
+ case ARM_NR_set_tls:
104
+ cpu_set_tls(env, env->regs[0]);
105
+ env->regs[0] = 0;
106
+ break;
107
+ case ARM_NR_breakpoint:
108
+ env->regs[15] -= env->thumb ? 2 : 4;
109
+ goto excp_debug;
110
+ case ARM_NR_get_tls:
111
+ env->regs[0] = cpu_get_tls(env);
112
+ break;
113
+ default:
114
+ if (n < 0xf0800) {
115
+ /*
116
+ * Syscalls 0xf0000..0xf07ff (or 0x9f0000..
117
+ * 0x9f07ff in OABI numbering) are defined
118
+ * to return -ENOSYS rather than raising
119
+ * SIGILL. Note that we have already
120
+ * removed the 0x900000 prefix.
121
+ */
122
+ qemu_log_mask(LOG_UNIMP,
123
+ "qemu: Unsupported ARM syscall: 0x%x\n",
124
+ n);
125
+ env->regs[0] = -TARGET_ENOSYS;
126
+ } else {
127
+ /*
128
+ * Otherwise SIGILL. This includes any SWI with
129
+ * immediate not originally 0x9fxxxx, because
130
+ * of the earlier XOR.
131
+ */
132
+ info.si_signo = TARGET_SIGILL;
133
+ info.si_errno = 0;
134
+ info.si_code = TARGET_ILL_ILLTRP;
135
+ info._sifields._sigfault._addr = env->regs[15];
136
+ if (env->thumb) {
137
+ info._sifields._sigfault._addr -= 2;
138
} else {
139
- /* Otherwise SIGILL */
140
- info.si_signo = TARGET_SIGILL;
141
- info.si_errno = 0;
142
- info.si_code = TARGET_ILL_ILLTRP;
143
- info._sifields._sigfault._addr = env->regs[15];
144
- if (env->thumb) {
145
- info._sifields._sigfault._addr -= 2;
146
- } else {
147
- info._sifields._sigfault._addr -= 4;
148
- }
149
- queue_signal(env, info.si_signo,
150
- QEMU_SI_FAULT, &info);
151
+ info._sifields._sigfault._addr -= 4;
152
}
153
- break;
154
- }
155
- } else {
156
- ret = do_syscall(env,
157
- n,
158
- env->regs[0],
159
- env->regs[1],
160
- env->regs[2],
161
- env->regs[3],
162
- env->regs[4],
163
- env->regs[5],
164
- 0, 0);
165
- if (ret == -TARGET_ERESTARTSYS) {
166
- env->regs[15] -= env->thumb ? 2 : 4;
167
- } else if (ret != -TARGET_QEMU_ESIGRETURN) {
168
- env->regs[0] = ret;
169
+ queue_signal(env, info.si_signo,
170
+ QEMU_SI_FAULT, &info);
171
}
172
+ break;
173
}
174
} else {
175
- goto error;
176
+ ret = do_syscall(env,
177
+ n,
178
+ env->regs[0],
179
+ env->regs[1],
180
+ env->regs[2],
181
+ env->regs[3],
182
+ env->regs[4],
183
+ env->regs[5],
184
+ 0, 0);
185
+ if (ret == -TARGET_ERESTARTSYS) {
186
+ env->regs[15] -= env->thumb ? 2 : 4;
187
+ } else if (ret != -TARGET_QEMU_ESIGRETURN) {
188
+ env->regs[0] = ret;
189
+ }
190
}
191
}
192
break;
193
--
31
--
194
2.20.1
32
2.25.1
195
33
196
34
diff view generated by jsdifflib
1
The kernel has different handling for syscalls with invalid
1
From: Olivier Hériveaux <olivier.heriveaux@ledger.fr>
2
numbers that are in the "arm-specific" range 0x9f0000 and up:
3
* 0x9f0000..0x9f07ff return -ENOSYS if not implemented
4
* other out of range syscalls cause a SIGILL
5
(see the kernel's arch/arm/kernel/traps.c:arm_syscall())
6
2
7
Implement this distinction. (Note that our code doesn't look
3
Fix issue where the data register may be overwritten by next character
8
quite like the kernel's, because we have removed the
4
reception before being read and returned.
9
0x900000 prefix by this point, whereas the kernel retains
10
it in arm_syscall().)
11
5
6
Signed-off-by: Olivier Hériveaux <olivier.heriveaux@ledger.fr>
7
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
8
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
9
Message-id: 20211128120723.4053-1-olivier.heriveaux@ledger.fr
12
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
13
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
14
Message-id: 20200420212206.12776-4-peter.maydell@linaro.org
15
---
11
---
16
linux-user/arm/cpu_loop.c | 30 ++++++++++++++++++++++++++----
12
hw/char/stm32f2xx_usart.c | 3 ++-
17
1 file changed, 26 insertions(+), 4 deletions(-)
13
1 file changed, 2 insertions(+), 1 deletion(-)
18
14
19
diff --git a/linux-user/arm/cpu_loop.c b/linux-user/arm/cpu_loop.c
15
diff --git a/hw/char/stm32f2xx_usart.c b/hw/char/stm32f2xx_usart.c
20
index XXXXXXX..XXXXXXX 100644
16
index XXXXXXX..XXXXXXX 100644
21
--- a/linux-user/arm/cpu_loop.c
17
--- a/hw/char/stm32f2xx_usart.c
22
+++ b/linux-user/arm/cpu_loop.c
18
+++ b/hw/char/stm32f2xx_usart.c
23
@@ -XXX,XX +XXX,XX @@ void cpu_loop(CPUARMState *env)
19
@@ -XXX,XX +XXX,XX @@ static uint64_t stm32f2xx_usart_read(void *opaque, hwaddr addr,
24
env->regs[0] = cpu_get_tls(env);
20
return retvalue;
25
break;
21
case USART_DR:
26
default:
22
DB_PRINT("Value: 0x%" PRIx32 ", %c\n", s->usart_dr, (char) s->usart_dr);
27
- qemu_log_mask(LOG_UNIMP,
23
+ retvalue = s->usart_dr & 0x3FF;
28
- "qemu: Unsupported ARM syscall: 0x%x\n",
24
s->usart_sr &= ~USART_SR_RXNE;
29
- n);
25
qemu_chr_fe_accept_input(&s->chr);
30
- env->regs[0] = -TARGET_ENOSYS;
26
qemu_set_irq(s->irq, 0);
31
+ if (n < 0xf0800) {
27
- return s->usart_dr & 0x3FF;
32
+ /*
28
+ return retvalue;
33
+ * Syscalls 0xf0000..0xf07ff (or 0x9f0000..
29
case USART_BRR:
34
+ * 0x9f07ff in OABI numbering) are defined
30
return s->usart_brr;
35
+ * to return -ENOSYS rather than raising
31
case USART_CR1:
36
+ * SIGILL. Note that we have already
37
+ * removed the 0x900000 prefix.
38
+ */
39
+ qemu_log_mask(LOG_UNIMP,
40
+ "qemu: Unsupported ARM syscall: 0x%x\n",
41
+ n);
42
+ env->regs[0] = -TARGET_ENOSYS;
43
+ } else {
44
+ /* Otherwise SIGILL */
45
+ info.si_signo = TARGET_SIGILL;
46
+ info.si_errno = 0;
47
+ info.si_code = TARGET_ILL_ILLTRP;
48
+ info._sifields._sigfault._addr = env->regs[15];
49
+ if (env->thumb) {
50
+ info._sifields._sigfault._addr -= 2;
51
+ } else {
52
+ info._sifields._sigfault._addr -= 4;
53
+ }
54
+ queue_signal(env, info.si_signo,
55
+ QEMU_SI_FAULT, &info);
56
+ }
57
break;
58
}
59
} else {
60
--
32
--
61
2.20.1
33
2.25.1
62
34
63
35
diff view generated by jsdifflib
1
Provide a minimal documentation of the Musca boards.
1
From: Philippe Mathieu-Daudé <philmd@redhat.com>
2
2
3
gicv3_set_gicv3state() is used by arm_gicv3_common.c in
4
arm_gicv3_common_realize(). Since we want to restrict
5
arm_gicv3_cpuif.c to TCG, extract gicv3_set_gicv3state()
6
to a new file. Add this file to the meson 'specific'
7
source set, since it needs access to "cpu.h".
8
9
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
10
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
11
Message-id: 20211115223619.2599282-2-philmd@redhat.com
3
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
12
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
4
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
5
Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
6
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
7
Message-id: 20200507151819.28444-6-peter.maydell@linaro.org
8
---
13
---
9
docs/system/arm/musca.rst | 31 +++++++++++++++++++++++++++++++
14
hw/intc/arm_gicv3_cpuif.c | 10 +---------
10
docs/system/target-arm.rst | 1 +
15
hw/intc/arm_gicv3_cpuif_common.c | 22 ++++++++++++++++++++++
11
MAINTAINERS | 1 +
16
hw/intc/meson.build | 1 +
12
3 files changed, 33 insertions(+)
17
3 files changed, 24 insertions(+), 9 deletions(-)
13
create mode 100644 docs/system/arm/musca.rst
18
create mode 100644 hw/intc/arm_gicv3_cpuif_common.c
14
19
15
diff --git a/docs/system/arm/musca.rst b/docs/system/arm/musca.rst
20
diff --git a/hw/intc/arm_gicv3_cpuif.c b/hw/intc/arm_gicv3_cpuif.c
21
index XXXXXXX..XXXXXXX 100644
22
--- a/hw/intc/arm_gicv3_cpuif.c
23
+++ b/hw/intc/arm_gicv3_cpuif.c
24
@@ -XXX,XX +XXX,XX @@
25
/*
26
- * ARM Generic Interrupt Controller v3
27
+ * ARM Generic Interrupt Controller v3 (emulation)
28
*
29
* Copyright (c) 2016 Linaro Limited
30
* Written by Peter Maydell
31
@@ -XXX,XX +XXX,XX @@
32
#include "hw/irq.h"
33
#include "cpu.h"
34
35
-void gicv3_set_gicv3state(CPUState *cpu, GICv3CPUState *s)
36
-{
37
- ARMCPU *arm_cpu = ARM_CPU(cpu);
38
- CPUARMState *env = &arm_cpu->env;
39
-
40
- env->gicv3state = (void *)s;
41
-};
42
-
43
static GICv3CPUState *icc_cs_from_env(CPUARMState *env)
44
{
45
return env->gicv3state;
46
diff --git a/hw/intc/arm_gicv3_cpuif_common.c b/hw/intc/arm_gicv3_cpuif_common.c
16
new file mode 100644
47
new file mode 100644
17
index XXXXXXX..XXXXXXX
48
index XXXXXXX..XXXXXXX
18
--- /dev/null
49
--- /dev/null
19
+++ b/docs/system/arm/musca.rst
50
+++ b/hw/intc/arm_gicv3_cpuif_common.c
20
@@ -XXX,XX +XXX,XX @@
51
@@ -XXX,XX +XXX,XX @@
21
+Arm Musca boards (``musca-a``, ``musca-b1``)
52
+/* SPDX-License-Identifier: GPL-2.0-or-later */
22
+============================================
53
+/*
54
+ * ARM Generic Interrupt Controller v3
55
+ *
56
+ * Copyright (c) 2016 Linaro Limited
57
+ * Written by Peter Maydell
58
+ *
59
+ * This code is licensed under the GPL, version 2 or (at your option)
60
+ * any later version.
61
+ */
23
+
62
+
24
+The Arm Musca development boards are a reference implementation
63
+#include "qemu/osdep.h"
25
+of a system using the SSE-200 Subsystem for Embedded. They are
64
+#include "gicv3_internal.h"
26
+dual Cortex-M33 systems.
65
+#include "cpu.h"
27
+
66
+
28
+QEMU provides models of the A and B1 variants of this board.
67
+void gicv3_set_gicv3state(CPUState *cpu, GICv3CPUState *s)
68
+{
69
+ ARMCPU *arm_cpu = ARM_CPU(cpu);
70
+ CPUARMState *env = &arm_cpu->env;
29
+
71
+
30
+Unimplemented devices:
72
+ env->gicv3state = (void *)s;
31
+
73
+};
32
+- SPI
74
diff --git a/hw/intc/meson.build b/hw/intc/meson.build
33
+- |I2C|
34
+- |I2S|
35
+- PWM
36
+- QSPI
37
+- Timer
38
+- SCC
39
+- GPIO
40
+- eFlash
41
+- MHU
42
+- PVT
43
+- SDIO
44
+- CryptoCell
45
+
46
+Note that (like the real hardware) the Musca-A machine is
47
+asymmetric: CPU 0 does not have the FPU or DSP extensions,
48
+but CPU 1 does. Also like the real hardware, the memory maps
49
+for the A and B1 variants differ significantly, so guest
50
+software must be built for the right variant.
51
+
52
diff --git a/docs/system/target-arm.rst b/docs/system/target-arm.rst
53
index XXXXXXX..XXXXXXX 100644
75
index XXXXXXX..XXXXXXX 100644
54
--- a/docs/system/target-arm.rst
76
--- a/hw/intc/meson.build
55
+++ b/docs/system/target-arm.rst
77
+++ b/hw/intc/meson.build
56
@@ -XXX,XX +XXX,XX @@ undocumented; you can get a complete list by running
78
@@ -XXX,XX +XXX,XX @@ softmmu_ss.add(when: 'CONFIG_XLNX_ZYNQMP_PMU', if_true: files('xlnx-pmu-iomod-in
57
79
58
arm/integratorcp
80
specific_ss.add(when: 'CONFIG_ALLWINNER_A10_PIC', if_true: files('allwinner-a10-pic.c'))
59
arm/mps2
81
specific_ss.add(when: 'CONFIG_APIC', if_true: files('apic.c', 'apic_common.c'))
60
+ arm/musca
82
+specific_ss.add(when: 'CONFIG_ARM_GIC', if_true: files('arm_gicv3_cpuif_common.c'))
61
arm/realview
83
specific_ss.add(when: 'CONFIG_ARM_GIC', if_true: files('arm_gicv3_cpuif.c'))
62
arm/versatile
84
specific_ss.add(when: 'CONFIG_ARM_GIC_KVM', if_true: files('arm_gic_kvm.c'))
63
arm/vexpress
85
specific_ss.add(when: ['CONFIG_ARM_GIC_KVM', 'TARGET_AARCH64'], if_true: files('arm_gicv3_kvm.c', 'arm_gicv3_its_kvm.c'))
64
diff --git a/MAINTAINERS b/MAINTAINERS
65
index XXXXXXX..XXXXXXX 100644
66
--- a/MAINTAINERS
67
+++ b/MAINTAINERS
68
@@ -XXX,XX +XXX,XX @@ M: Peter Maydell <peter.maydell@linaro.org>
69
L: qemu-arm@nongnu.org
70
S: Maintained
71
F: hw/arm/musca.c
72
+F: docs/system/arm/musca.rst
73
74
Musicpal
75
M: Jan Kiszka <jan.kiszka@web.de>
76
--
86
--
77
2.20.1
87
2.25.1
78
88
79
89
diff view generated by jsdifflib
1
We incorrectly treat SVC 0xf0002 as a cacheflush request (which is a
1
From: Philippe Mathieu-Daudé <philmd@redhat.com>
2
NOP for QEMU). This is the wrong syscall number, because in the
3
svc-immediate OABI syscall numbers are all offset by the
4
ARM_SYSCALL_BASE value and so the correct insn is SVC 0x9f0002.
5
(This is handled further down in the code with the other Arm-specific
6
syscalls like NR_breakpoint.)
7
2
8
When this code was initially added in commit 6f1f31c069b20611 in
3
The TYPE_ARM_GICV3 device is an emulated one. When using
9
2004, ARM_NR_cacheflush was defined as (ARM_SYSCALL_BASE + 0xf0000 + 2)
4
KVM, it is recommended to use the TYPE_KVM_ARM_GICV3 device
10
so the value in the comparison took account of the extra 0x900000
5
(which uses in-kernel support).
11
offset. In commit fbb4a2e371f2fa7 in 2008, the ARM_SYSCALL_BASE
12
was removed from the definition of ARM_NR_cacheflush and handling
13
for this group of syscalls was added below the point where we subtract
14
ARM_SYSCALL_BASE from the SVC immediate value. However that commit
15
forgot to remove the now-obsolete earlier handling code.
16
6
17
Remove the spurious ARM_NR_cacheflush condition.
7
When using --with-devices-FOO, it is possible to build a
8
binary with a specific set of devices. When this binary is
9
restricted to KVM accelerator, the TYPE_ARM_GICV3 device is
10
irrelevant, and it is desirable to remove it from the binary.
18
11
12
Therefore introduce the CONFIG_ARM_GIC_TCG Kconfig selector
13
which select the files required to have the TYPE_ARM_GICV3
14
device, but also allowing to de-select this device.
15
16
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
17
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
18
Message-id: 20211115223619.2599282-3-philmd@redhat.com
19
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
19
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
20
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
21
Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
22
Message-id: 20200420212206.12776-3-peter.maydell@linaro.org
23
---
20
---
24
linux-user/arm/cpu_loop.c | 4 +---
21
hw/intc/arm_gicv3.c | 2 +-
25
1 file changed, 1 insertion(+), 3 deletions(-)
22
hw/intc/Kconfig | 5 +++++
23
hw/intc/meson.build | 10 ++++++----
24
3 files changed, 12 insertions(+), 5 deletions(-)
26
25
27
diff --git a/linux-user/arm/cpu_loop.c b/linux-user/arm/cpu_loop.c
26
diff --git a/hw/intc/arm_gicv3.c b/hw/intc/arm_gicv3.c
28
index XXXXXXX..XXXXXXX 100644
27
index XXXXXXX..XXXXXXX 100644
29
--- a/linux-user/arm/cpu_loop.c
28
--- a/hw/intc/arm_gicv3.c
30
+++ b/linux-user/arm/cpu_loop.c
29
+++ b/hw/intc/arm_gicv3.c
31
@@ -XXX,XX +XXX,XX @@ void cpu_loop(CPUARMState *env)
30
@@ -XXX,XX +XXX,XX @@
32
n = insn & 0xffffff;
31
/*
33
}
32
- * ARM Generic Interrupt Controller v3
34
33
+ * ARM Generic Interrupt Controller v3 (emulation)
35
- if (n == ARM_NR_cacheflush) {
34
*
36
- /* nop */
35
* Copyright (c) 2015 Huawei.
37
- } else if (n == 0 || n >= ARM_SYSCALL_BASE || env->thumb) {
36
* Copyright (c) 2016 Linaro Limited
38
+ if (n == 0 || n >= ARM_SYSCALL_BASE || env->thumb) {
37
diff --git a/hw/intc/Kconfig b/hw/intc/Kconfig
39
/* linux syscall */
38
index XXXXXXX..XXXXXXX 100644
40
if (env->thumb || n == 0) {
39
--- a/hw/intc/Kconfig
41
n = env->regs[7];
40
+++ b/hw/intc/Kconfig
41
@@ -XXX,XX +XXX,XX @@ config APIC
42
select MSI_NONBROKEN
43
select I8259
44
45
+config ARM_GIC_TCG
46
+ bool
47
+ default y
48
+ depends on ARM_GIC && TCG
49
+
50
config ARM_GIC_KVM
51
bool
52
default y
53
diff --git a/hw/intc/meson.build b/hw/intc/meson.build
54
index XXXXXXX..XXXXXXX 100644
55
--- a/hw/intc/meson.build
56
+++ b/hw/intc/meson.build
57
@@ -XXX,XX +XXX,XX @@ softmmu_ss.add(when: 'CONFIG_ARM_GIC', if_true: files(
58
'arm_gic.c',
59
'arm_gic_common.c',
60
'arm_gicv2m.c',
61
- 'arm_gicv3.c',
62
'arm_gicv3_common.c',
63
- 'arm_gicv3_dist.c',
64
'arm_gicv3_its_common.c',
65
- 'arm_gicv3_redist.c',
66
+))
67
+softmmu_ss.add(when: 'CONFIG_ARM_GIC_TCG', if_true: files(
68
+ 'arm_gicv3.c',
69
+ 'arm_gicv3_dist.c',
70
'arm_gicv3_its.c',
71
+ 'arm_gicv3_redist.c',
72
))
73
softmmu_ss.add(when: 'CONFIG_ETRAXFS', if_true: files('etraxfs_pic.c'))
74
softmmu_ss.add(when: 'CONFIG_HEATHROW_PIC', if_true: files('heathrow_pic.c'))
75
@@ -XXX,XX +XXX,XX @@ softmmu_ss.add(when: 'CONFIG_XLNX_ZYNQMP_PMU', if_true: files('xlnx-pmu-iomod-in
76
specific_ss.add(when: 'CONFIG_ALLWINNER_A10_PIC', if_true: files('allwinner-a10-pic.c'))
77
specific_ss.add(when: 'CONFIG_APIC', if_true: files('apic.c', 'apic_common.c'))
78
specific_ss.add(when: 'CONFIG_ARM_GIC', if_true: files('arm_gicv3_cpuif_common.c'))
79
-specific_ss.add(when: 'CONFIG_ARM_GIC', if_true: files('arm_gicv3_cpuif.c'))
80
+specific_ss.add(when: 'CONFIG_ARM_GIC_TCG', if_true: files('arm_gicv3_cpuif.c'))
81
specific_ss.add(when: 'CONFIG_ARM_GIC_KVM', if_true: files('arm_gic_kvm.c'))
82
specific_ss.add(when: ['CONFIG_ARM_GIC_KVM', 'TARGET_AARCH64'], if_true: files('arm_gicv3_kvm.c', 'arm_gicv3_its_kvm.c'))
83
specific_ss.add(when: 'CONFIG_ARM_V7M', if_true: files('armv7m_nvic.c'))
42
--
84
--
43
2.20.1
85
2.25.1
44
86
45
87
diff view generated by jsdifflib
1
From: Richard Henderson <richard.henderson@linaro.org>
1
From: Richard Henderson <richard.henderson@linaro.org>
2
2
3
Do not explicitly store zero to the NEON high part
4
when we can pass !is_q to clear_vec_high.
5
6
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
7
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
3
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
8
Message-id: 20200519212453.28494-3-richard.henderson@linaro.org
4
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
9
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
5
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
10
---
6
---
11
target/arm/translate-a64.c | 53 +++++++++++++++++++++++---------------
7
target/arm/translate-a64.c | 7 ++++---
12
1 file changed, 32 insertions(+), 21 deletions(-)
8
1 file changed, 4 insertions(+), 3 deletions(-)
13
9
14
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
10
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
15
index XXXXXXX..XXXXXXX 100644
11
index XXXXXXX..XXXXXXX 100644
16
--- a/target/arm/translate-a64.c
12
--- a/target/arm/translate-a64.c
17
+++ b/target/arm/translate-a64.c
13
+++ b/target/arm/translate-a64.c
18
@@ -XXX,XX +XXX,XX @@ static void do_fp_ld(DisasContext *s, int destidx, TCGv_i64 tcg_addr, int size)
14
@@ -XXX,XX +XXX,XX @@ static void aarch64_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu)
19
{
15
{
20
/* This always zero-extends and writes to a full 128 bit wide vector */
16
DisasContext *s = container_of(dcbase, DisasContext, base);
21
TCGv_i64 tmplo = tcg_temp_new_i64();
17
CPUARMState *env = cpu->env_ptr;
22
- TCGv_i64 tmphi;
18
+ uint64_t pc = s->base.pc_next;
23
+ TCGv_i64 tmphi = NULL;
19
uint32_t insn;
24
20
25
if (size < 4) {
21
if (s->ss_active && !s->pstate_ss) {
26
MemOp memop = s->be_data + size;
22
@@ -XXX,XX +XXX,XX @@ static void aarch64_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu)
27
- tmphi = tcg_const_i64(0);
23
return;
28
tcg_gen_qemu_ld_i64(tmplo, tcg_addr, get_mem_index(s), memop);
29
} else {
30
bool be = s->be_data == MO_BE;
31
@@ -XXX,XX +XXX,XX @@ static void do_fp_ld(DisasContext *s, int destidx, TCGv_i64 tcg_addr, int size)
32
}
24
}
33
25
34
tcg_gen_st_i64(tmplo, cpu_env, fp_reg_offset(s, destidx, MO_64));
26
- s->pc_curr = s->base.pc_next;
35
- tcg_gen_st_i64(tmphi, cpu_env, fp_reg_hi_offset(s, destidx));
27
- insn = arm_ldl_code(env, &s->base, s->base.pc_next, s->sctlr_b);
36
-
28
+ s->pc_curr = pc;
37
tcg_temp_free_i64(tmplo);
29
+ insn = arm_ldl_code(env, &s->base, pc, s->sctlr_b);
38
- tcg_temp_free_i64(tmphi);
30
s->insn = insn;
39
31
- s->base.pc_next += 4;
40
- clear_vec_high(s, true, destidx);
32
+ s->base.pc_next = pc + 4;
41
+ if (tmphi) {
33
42
+ tcg_gen_st_i64(tmphi, cpu_env, fp_reg_hi_offset(s, destidx));
34
s->fp_access_checked = false;
43
+ tcg_temp_free_i64(tmphi);
35
s->sve_access_checked = false;
44
+ }
45
+ clear_vec_high(s, tmphi != NULL, destidx);
46
}
47
48
/*
49
@@ -XXX,XX +XXX,XX @@ static void disas_simd_ext(DisasContext *s, uint32_t insn)
50
read_vec_element(s, tcg_resh, rm, 0, MO_64);
51
do_ext64(s, tcg_resh, tcg_resl, pos);
52
}
53
- tcg_gen_movi_i64(tcg_resh, 0);
54
} else {
55
TCGv_i64 tcg_hh;
56
typedef struct {
57
@@ -XXX,XX +XXX,XX @@ static void disas_simd_ext(DisasContext *s, uint32_t insn)
58
59
write_vec_element(s, tcg_resl, rd, 0, MO_64);
60
tcg_temp_free_i64(tcg_resl);
61
- write_vec_element(s, tcg_resh, rd, 1, MO_64);
62
+ if (is_q) {
63
+ write_vec_element(s, tcg_resh, rd, 1, MO_64);
64
+ }
65
tcg_temp_free_i64(tcg_resh);
66
- clear_vec_high(s, true, rd);
67
+ clear_vec_high(s, is_q, rd);
68
}
69
70
/* TBL/TBX
71
@@ -XXX,XX +XXX,XX @@ static void disas_simd_tb(DisasContext *s, uint32_t insn)
72
* the input.
73
*/
74
tcg_resl = tcg_temp_new_i64();
75
- tcg_resh = tcg_temp_new_i64();
76
+ tcg_resh = NULL;
77
78
if (is_tblx) {
79
read_vec_element(s, tcg_resl, rd, 0, MO_64);
80
} else {
81
tcg_gen_movi_i64(tcg_resl, 0);
82
}
83
- if (is_tblx && is_q) {
84
- read_vec_element(s, tcg_resh, rd, 1, MO_64);
85
- } else {
86
- tcg_gen_movi_i64(tcg_resh, 0);
87
+
88
+ if (is_q) {
89
+ tcg_resh = tcg_temp_new_i64();
90
+ if (is_tblx) {
91
+ read_vec_element(s, tcg_resh, rd, 1, MO_64);
92
+ } else {
93
+ tcg_gen_movi_i64(tcg_resh, 0);
94
+ }
95
}
96
97
tcg_idx = tcg_temp_new_i64();
98
@@ -XXX,XX +XXX,XX @@ static void disas_simd_tb(DisasContext *s, uint32_t insn)
99
100
write_vec_element(s, tcg_resl, rd, 0, MO_64);
101
tcg_temp_free_i64(tcg_resl);
102
- write_vec_element(s, tcg_resh, rd, 1, MO_64);
103
- tcg_temp_free_i64(tcg_resh);
104
- clear_vec_high(s, true, rd);
105
+
106
+ if (is_q) {
107
+ write_vec_element(s, tcg_resh, rd, 1, MO_64);
108
+ tcg_temp_free_i64(tcg_resh);
109
+ }
110
+ clear_vec_high(s, is_q, rd);
111
}
112
113
/* ZIP/UZP/TRN
114
@@ -XXX,XX +XXX,XX @@ static void disas_simd_zip_trn(DisasContext *s, uint32_t insn)
115
}
116
117
tcg_resl = tcg_const_i64(0);
118
- tcg_resh = tcg_const_i64(0);
119
+ tcg_resh = is_q ? tcg_const_i64(0) : NULL;
120
tcg_res = tcg_temp_new_i64();
121
122
for (i = 0; i < elements; i++) {
123
@@ -XXX,XX +XXX,XX @@ static void disas_simd_zip_trn(DisasContext *s, uint32_t insn)
124
125
write_vec_element(s, tcg_resl, rd, 0, MO_64);
126
tcg_temp_free_i64(tcg_resl);
127
- write_vec_element(s, tcg_resh, rd, 1, MO_64);
128
- tcg_temp_free_i64(tcg_resh);
129
- clear_vec_high(s, true, rd);
130
+
131
+ if (is_q) {
132
+ write_vec_element(s, tcg_resh, rd, 1, MO_64);
133
+ tcg_temp_free_i64(tcg_resh);
134
+ }
135
+ clear_vec_high(s, is_q, rd);
136
}
137
138
/*
139
--
36
--
140
2.20.1
37
2.25.1
141
38
142
39
diff view generated by jsdifflib
1
From: Guenter Roeck <linux@roeck-us.net>
1
From: Richard Henderson <richard.henderson@linaro.org>
2
2
3
With this commit, the watchdog on mcimx6ul-evk is fully operational,
3
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
including pretimeout support.
4
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
5
6
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
7
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
8
Message-id: 20200517162135.110364-7-linux@roeck-us.net
9
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
5
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
10
---
6
---
11
hw/arm/fsl-imx6ul.c | 10 ++++++++++
7
target/arm/translate.c | 9 +++++----
12
1 file changed, 10 insertions(+)
8
1 file changed, 5 insertions(+), 4 deletions(-)
13
9
14
diff --git a/hw/arm/fsl-imx6ul.c b/hw/arm/fsl-imx6ul.c
10
diff --git a/target/arm/translate.c b/target/arm/translate.c
15
index XXXXXXX..XXXXXXX 100644
11
index XXXXXXX..XXXXXXX 100644
16
--- a/hw/arm/fsl-imx6ul.c
12
--- a/target/arm/translate.c
17
+++ b/hw/arm/fsl-imx6ul.c
13
+++ b/target/arm/translate.c
18
@@ -XXX,XX +XXX,XX @@ static void fsl_imx6ul_realize(DeviceState *dev, Error **errp)
14
@@ -XXX,XX +XXX,XX @@ static void arm_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu)
19
FSL_IMX6UL_WDOG2_ADDR,
15
{
20
FSL_IMX6UL_WDOG3_ADDR,
16
DisasContext *dc = container_of(dcbase, DisasContext, base);
21
};
17
CPUARMState *env = cpu->env_ptr;
22
+ static const int FSL_IMX6UL_WDOGn_IRQ[FSL_IMX6UL_NUM_WDTS] = {
18
+ uint32_t pc = dc->base.pc_next;
23
+ FSL_IMX6UL_WDOG1_IRQ,
19
unsigned int insn;
24
+ FSL_IMX6UL_WDOG2_IRQ,
20
25
+ FSL_IMX6UL_WDOG3_IRQ,
21
if (arm_pre_translate_insn(dc)) {
26
+ };
22
- dc->base.pc_next += 4;
27
23
+ dc->base.pc_next = pc + 4;
28
+ object_property_set_bool(OBJECT(&s->wdt[i]), true, "pretimeout-support",
24
return;
29
+ &error_abort);
30
object_property_set_bool(OBJECT(&s->wdt[i]), true, "realized",
31
&error_abort);
32
33
sysbus_mmio_map(SYS_BUS_DEVICE(&s->wdt[i]), 0,
34
FSL_IMX6UL_WDOGn_ADDR[i]);
35
+ sysbus_connect_irq(SYS_BUS_DEVICE(&s->wdt[i]), 0,
36
+ qdev_get_gpio_in(DEVICE(&s->a7mpcore),
37
+ FSL_IMX6UL_WDOGn_IRQ[i]));
38
}
25
}
39
26
40
/*
27
- dc->pc_curr = dc->base.pc_next;
28
- insn = arm_ldl_code(env, &dc->base, dc->base.pc_next, dc->sctlr_b);
29
+ dc->pc_curr = pc;
30
+ insn = arm_ldl_code(env, &dc->base, pc, dc->sctlr_b);
31
dc->insn = insn;
32
- dc->base.pc_next += 4;
33
+ dc->base.pc_next = pc + 4;
34
disas_arm_insn(dc, insn);
35
36
arm_post_translate_insn(dc);
41
--
37
--
42
2.20.1
38
2.25.1
43
39
44
40
diff view generated by jsdifflib
1
From: Guenter Roeck <linux@roeck-us.net>
1
From: Richard Henderson <richard.henderson@linaro.org>
2
2
3
i.MX7 supports watchdog pretimeout interupts. With this commit,
3
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
the watchdog in mcimx7d-sabre is fully operational, including
5
pretimeout support.
6
7
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
4
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
8
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
9
Message-id: 20200517162135.110364-9-linux@roeck-us.net
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
5
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
11
---
6
---
12
include/hw/arm/fsl-imx7.h | 5 +++++
7
target/arm/translate.c | 16 ++++++++--------
13
hw/arm/fsl-imx7.c | 11 +++++++++++
8
1 file changed, 8 insertions(+), 8 deletions(-)
14
2 files changed, 16 insertions(+)
15
9
16
diff --git a/include/hw/arm/fsl-imx7.h b/include/hw/arm/fsl-imx7.h
10
diff --git a/target/arm/translate.c b/target/arm/translate.c
17
index XXXXXXX..XXXXXXX 100644
11
index XXXXXXX..XXXXXXX 100644
18
--- a/include/hw/arm/fsl-imx7.h
12
--- a/target/arm/translate.c
19
+++ b/include/hw/arm/fsl-imx7.h
13
+++ b/target/arm/translate.c
20
@@ -XXX,XX +XXX,XX @@ enum FslIMX7IRQs {
14
@@ -XXX,XX +XXX,XX @@ static void thumb_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu)
21
FSL_IMX7_USB2_IRQ = 42,
15
{
22
FSL_IMX7_USB3_IRQ = 40,
16
DisasContext *dc = container_of(dcbase, DisasContext, base);
23
17
CPUARMState *env = cpu->env_ptr;
24
+ FSL_IMX7_WDOG1_IRQ = 78,
18
+ uint32_t pc = dc->base.pc_next;
25
+ FSL_IMX7_WDOG2_IRQ = 79,
19
uint32_t insn;
26
+ FSL_IMX7_WDOG3_IRQ = 10,
20
bool is_16bit;
27
+ FSL_IMX7_WDOG4_IRQ = 109,
21
28
+
22
if (arm_pre_translate_insn(dc)) {
29
FSL_IMX7_PCI_INTA_IRQ = 125,
23
- dc->base.pc_next += 2;
30
FSL_IMX7_PCI_INTB_IRQ = 124,
24
+ dc->base.pc_next = pc + 2;
31
FSL_IMX7_PCI_INTC_IRQ = 123,
25
return;
32
diff --git a/hw/arm/fsl-imx7.c b/hw/arm/fsl-imx7.c
33
index XXXXXXX..XXXXXXX 100644
34
--- a/hw/arm/fsl-imx7.c
35
+++ b/hw/arm/fsl-imx7.c
36
@@ -XXX,XX +XXX,XX @@ static void fsl_imx7_realize(DeviceState *dev, Error **errp)
37
FSL_IMX7_WDOG3_ADDR,
38
FSL_IMX7_WDOG4_ADDR,
39
};
40
+ static const int FSL_IMX7_WDOGn_IRQ[FSL_IMX7_NUM_WDTS] = {
41
+ FSL_IMX7_WDOG1_IRQ,
42
+ FSL_IMX7_WDOG2_IRQ,
43
+ FSL_IMX7_WDOG3_IRQ,
44
+ FSL_IMX7_WDOG4_IRQ,
45
+ };
46
47
+ object_property_set_bool(OBJECT(&s->wdt[i]), true, "pretimeout-support",
48
+ &error_abort);
49
object_property_set_bool(OBJECT(&s->wdt[i]), true, "realized",
50
&error_abort);
51
52
sysbus_mmio_map(SYS_BUS_DEVICE(&s->wdt[i]), 0, FSL_IMX7_WDOGn_ADDR[i]);
53
+ sysbus_connect_irq(SYS_BUS_DEVICE(&s->wdt[i]), 0,
54
+ qdev_get_gpio_in(DEVICE(&s->a7mpcore),
55
+ FSL_IMX7_WDOGn_IRQ[i]));
56
}
26
}
57
27
58
/*
28
- dc->pc_curr = dc->base.pc_next;
29
- insn = arm_lduw_code(env, &dc->base, dc->base.pc_next, dc->sctlr_b);
30
+ dc->pc_curr = pc;
31
+ insn = arm_lduw_code(env, &dc->base, pc, dc->sctlr_b);
32
is_16bit = thumb_insn_is_16bit(dc, dc->base.pc_next, insn);
33
- dc->base.pc_next += 2;
34
+ pc += 2;
35
if (!is_16bit) {
36
- uint32_t insn2 = arm_lduw_code(env, &dc->base, dc->base.pc_next,
37
- dc->sctlr_b);
38
-
39
+ uint32_t insn2 = arm_lduw_code(env, &dc->base, pc, dc->sctlr_b);
40
insn = insn << 16 | insn2;
41
- dc->base.pc_next += 2;
42
+ pc += 2;
43
}
44
+ dc->base.pc_next = pc;
45
dc->insn = insn;
46
47
if (dc->pstate_il) {
59
--
48
--
60
2.20.1
49
2.25.1
61
50
62
51
diff view generated by jsdifflib
1
The GEN_NEON_INTEGER_OP macro is no longer used; remove it.
1
From: Richard Henderson <richard.henderson@linaro.org>
2
2
3
Create arm_check_ss_active and arm_check_kernelpage.
4
5
Reverse the order of the tests. While it doesn't matter in practice,
6
because only user-only has a kernel page and user-only never sets
7
ss_active, ss_active has priority over execution exceptions and it
8
is best to keep them in the proper order.
9
10
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
11
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
3
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
12
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
4
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
5
---
13
---
6
target/arm/translate.c | 23 -----------------------
14
target/arm/translate.c | 10 +++++++---
7
1 file changed, 23 deletions(-)
15
1 file changed, 7 insertions(+), 3 deletions(-)
8
16
9
diff --git a/target/arm/translate.c b/target/arm/translate.c
17
diff --git a/target/arm/translate.c b/target/arm/translate.c
10
index XXXXXXX..XXXXXXX 100644
18
index XXXXXXX..XXXXXXX 100644
11
--- a/target/arm/translate.c
19
--- a/target/arm/translate.c
12
+++ b/target/arm/translate.c
20
+++ b/target/arm/translate.c
13
@@ -XXX,XX +XXX,XX @@ static inline void gen_neon_rsb(int size, TCGv_i32 t0, TCGv_i32 t1)
21
@@ -XXX,XX +XXX,XX @@ static void arm_tr_insn_start(DisasContextBase *dcbase, CPUState *cpu)
14
default: return 1; \
22
dc->insn_start = tcg_last_op();
15
}} while (0)
23
}
16
24
17
-#define GEN_NEON_INTEGER_OP(name) do { \
25
-static bool arm_pre_translate_insn(DisasContext *dc)
18
- switch ((size << 1) | u) { \
26
+static bool arm_check_kernelpage(DisasContext *dc)
19
- case 0: \
20
- gen_helper_neon_##name##_s8(tmp, tmp, tmp2); \
21
- break; \
22
- case 1: \
23
- gen_helper_neon_##name##_u8(tmp, tmp, tmp2); \
24
- break; \
25
- case 2: \
26
- gen_helper_neon_##name##_s16(tmp, tmp, tmp2); \
27
- break; \
28
- case 3: \
29
- gen_helper_neon_##name##_u16(tmp, tmp, tmp2); \
30
- break; \
31
- case 4: \
32
- gen_helper_neon_##name##_s32(tmp, tmp, tmp2); \
33
- break; \
34
- case 5: \
35
- gen_helper_neon_##name##_u32(tmp, tmp, tmp2); \
36
- break; \
37
- default: return 1; \
38
- }} while (0)
39
-
40
static TCGv_i32 neon_load_scratch(int scratch)
41
{
27
{
42
TCGv_i32 tmp = tcg_temp_new_i32();
28
#ifdef CONFIG_USER_ONLY
29
/* Intercept jump to the magic kernel page. */
30
@@ -XXX,XX +XXX,XX @@ static bool arm_pre_translate_insn(DisasContext *dc)
31
return true;
32
}
33
#endif
34
+ return false;
35
+}
36
37
+static bool arm_check_ss_active(DisasContext *dc)
38
+{
39
if (dc->ss_active && !dc->pstate_ss) {
40
/* Singlestep state is Active-pending.
41
* If we're in this state at the start of a TB then either
42
@@ -XXX,XX +XXX,XX @@ static void arm_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu)
43
uint32_t pc = dc->base.pc_next;
44
unsigned int insn;
45
46
- if (arm_pre_translate_insn(dc)) {
47
+ if (arm_check_ss_active(dc) || arm_check_kernelpage(dc)) {
48
dc->base.pc_next = pc + 4;
49
return;
50
}
51
@@ -XXX,XX +XXX,XX @@ static void thumb_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu)
52
uint32_t insn;
53
bool is_16bit;
54
55
- if (arm_pre_translate_insn(dc)) {
56
+ if (arm_check_ss_active(dc) || arm_check_kernelpage(dc)) {
57
dc->base.pc_next = pc + 2;
58
return;
59
}
43
--
60
--
44
2.20.1
61
2.25.1
45
62
46
63
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 8-byte store for the end a !is_q operation can be
3
The size of the code covered by a TranslationBlock cannot be 0;
4
merged with the other stores. Use a no-op vector move
4
this is checked via assert in tb_gen_code.
5
to trigger the expand_clr portion of tcg_gen_gvec_mov.
6
5
7
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
8
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
6
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
9
Message-id: 20200519212453.28494-2-richard.henderson@linaro.org
7
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
8
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
11
---
9
---
12
target/arm/translate-a64.c | 10 ++--------
10
target/arm/translate-a64.c | 1 +
13
1 file changed, 2 insertions(+), 8 deletions(-)
11
1 file changed, 1 insertion(+)
14
12
15
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
13
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
16
index XXXXXXX..XXXXXXX 100644
14
index XXXXXXX..XXXXXXX 100644
17
--- a/target/arm/translate-a64.c
15
--- a/target/arm/translate-a64.c
18
+++ b/target/arm/translate-a64.c
16
+++ b/target/arm/translate-a64.c
19
@@ -XXX,XX +XXX,XX @@ static void clear_vec_high(DisasContext *s, bool is_q, int rd)
17
@@ -XXX,XX +XXX,XX @@ static void aarch64_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu)
20
unsigned ofs = fp_reg_offset(s, rd, MO_64);
18
assert(s->base.num_insns == 1);
21
unsigned vsz = vec_full_reg_size(s);
19
gen_swstep_exception(s, 0, 0);
22
20
s->base.is_jmp = DISAS_NORETURN;
23
- if (!is_q) {
21
+ s->base.pc_next = pc + 4;
24
- TCGv_i64 tcg_zero = tcg_const_i64(0);
22
return;
25
- tcg_gen_st_i64(tcg_zero, cpu_env, ofs + 8);
23
}
26
- tcg_temp_free_i64(tcg_zero);
24
27
- }
28
- if (vsz > 16) {
29
- tcg_gen_gvec_dup_imm(MO_64, ofs + 16, vsz - 16, vsz - 16, 0);
30
- }
31
+ /* Nop move, with side effect of clearing the tail. */
32
+ tcg_gen_gvec_mov(MO_64, ofs, ofs, is_q ? 16 : 8, vsz);
33
}
34
35
void write_fp_dreg(DisasContext *s, int reg, TCGv_i64 v)
36
--
25
--
37
2.20.1
26
2.25.1
38
27
39
28
diff view generated by jsdifflib
1
From: Guenter Roeck <linux@roeck-us.net>
1
From: Richard Henderson <richard.henderson@linaro.org>
2
2
3
With this patch applied, the watchdog in the sabrelite emulation
3
We will reuse this section of arm_deliver_fault for
4
is fully operational, including pretimeout support.
4
raising pc alignment faults.
5
5
6
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
6
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
7
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
7
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
8
Message-id: 20200517162135.110364-6-linux@roeck-us.net
9
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
8
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
10
---
9
---
11
hw/arm/fsl-imx6.c | 9 +++++++++
10
target/arm/tlb_helper.c | 45 +++++++++++++++++++++++++----------------
12
1 file changed, 9 insertions(+)
11
1 file changed, 28 insertions(+), 17 deletions(-)
13
12
14
diff --git a/hw/arm/fsl-imx6.c b/hw/arm/fsl-imx6.c
13
diff --git a/target/arm/tlb_helper.c b/target/arm/tlb_helper.c
15
index XXXXXXX..XXXXXXX 100644
14
index XXXXXXX..XXXXXXX 100644
16
--- a/hw/arm/fsl-imx6.c
15
--- a/target/arm/tlb_helper.c
17
+++ b/hw/arm/fsl-imx6.c
16
+++ b/target/arm/tlb_helper.c
18
@@ -XXX,XX +XXX,XX @@ static void fsl_imx6_realize(DeviceState *dev, Error **errp)
17
@@ -XXX,XX +XXX,XX @@ static inline uint32_t merge_syn_data_abort(uint32_t template_syn,
19
FSL_IMX6_WDOG1_ADDR,
18
return syn;
20
FSL_IMX6_WDOG2_ADDR,
19
}
21
};
20
22
+ static const int FSL_IMX6_WDOGn_IRQ[FSL_IMX6_NUM_WDTS] = {
21
-static void QEMU_NORETURN arm_deliver_fault(ARMCPU *cpu, vaddr addr,
23
+ FSL_IMX6_WDOG1_IRQ,
22
- MMUAccessType access_type,
24
+ FSL_IMX6_WDOG2_IRQ,
23
- int mmu_idx, ARMMMUFaultInfo *fi)
25
+ };
24
+static uint32_t compute_fsr_fsc(CPUARMState *env, ARMMMUFaultInfo *fi,
26
25
+ int target_el, int mmu_idx, uint32_t *ret_fsc)
27
+ object_property_set_bool(OBJECT(&s->wdt[i]), true, "pretimeout-support",
26
{
28
+ &error_abort);
27
- CPUARMState *env = &cpu->env;
29
object_property_set_bool(OBJECT(&s->wdt[i]), true, "realized",
28
- int target_el;
30
&error_abort);
29
- bool same_el;
31
30
- uint32_t syn, exc, fsr, fsc;
32
sysbus_mmio_map(SYS_BUS_DEVICE(&s->wdt[i]), 0, FSL_IMX6_WDOGn_ADDR[i]);
31
ARMMMUIdx arm_mmu_idx = core_to_arm_mmu_idx(env, mmu_idx);
33
+ sysbus_connect_irq(SYS_BUS_DEVICE(&s->wdt[i]), 0,
32
-
34
+ qdev_get_gpio_in(DEVICE(&s->a9mpcore),
33
- target_el = exception_target_el(env);
35
+ FSL_IMX6_WDOGn_IRQ[i]));
34
- if (fi->stage2) {
35
- target_el = 2;
36
- env->cp15.hpfar_el2 = extract64(fi->s2addr, 12, 47) << 4;
37
- if (arm_is_secure_below_el3(env) && fi->s1ns) {
38
- env->cp15.hpfar_el2 |= HPFAR_NS;
39
- }
40
- }
41
- same_el = (arm_current_el(env) == target_el);
42
+ uint32_t fsr, fsc;
43
44
if (target_el == 2 || arm_el_is_aa64(env, target_el) ||
45
arm_s1_regime_using_lpae_format(env, arm_mmu_idx)) {
46
@@ -XXX,XX +XXX,XX @@ static void QEMU_NORETURN arm_deliver_fault(ARMCPU *cpu, vaddr addr,
47
fsc = 0x3f;
36
}
48
}
37
49
38
/* ROM memory */
50
+ *ret_fsc = fsc;
51
+ return fsr;
52
+}
53
+
54
+static void QEMU_NORETURN arm_deliver_fault(ARMCPU *cpu, vaddr addr,
55
+ MMUAccessType access_type,
56
+ int mmu_idx, ARMMMUFaultInfo *fi)
57
+{
58
+ CPUARMState *env = &cpu->env;
59
+ int target_el;
60
+ bool same_el;
61
+ uint32_t syn, exc, fsr, fsc;
62
+
63
+ target_el = exception_target_el(env);
64
+ if (fi->stage2) {
65
+ target_el = 2;
66
+ env->cp15.hpfar_el2 = extract64(fi->s2addr, 12, 47) << 4;
67
+ if (arm_is_secure_below_el3(env) && fi->s1ns) {
68
+ env->cp15.hpfar_el2 |= HPFAR_NS;
69
+ }
70
+ }
71
+ same_el = (arm_current_el(env) == target_el);
72
+
73
+ fsr = compute_fsr_fsc(env, fi, target_el, mmu_idx, &fsc);
74
+
75
if (access_type == MMU_INST_FETCH) {
76
syn = syn_insn_abort(same_el, fi->ea, fi->s1ptw, fsc);
77
exc = EXCP_PREFETCH_ABORT;
39
--
78
--
40
2.20.1
79
2.25.1
41
80
42
81
diff view generated by jsdifflib
New patch
1
1
From: Richard Henderson <richard.henderson@linaro.org>
2
3
For A64, any input to an indirect branch can cause this.
4
5
For A32, many indirect branch paths force the branch to be aligned,
6
but BXWritePC does not. This includes the BX instruction but also
7
other interworking changes to PC. Prior to v8, this case is UNDEFINED.
8
With v8, this is CONSTRAINED UNPREDICTABLE and may either raise an
9
exception or force align the PC.
10
11
We choose to raise an exception because we have the infrastructure,
12
it makes the generated code for gen_bx simpler, and it has the
13
possibility of catching more guest bugs.
14
15
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
16
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
17
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
18
---
19
target/arm/helper.h | 1 +
20
target/arm/syndrome.h | 5 ++++
21
linux-user/aarch64/cpu_loop.c | 46 ++++++++++++++++++++---------------
22
target/arm/tlb_helper.c | 18 ++++++++++++++
23
target/arm/translate-a64.c | 15 ++++++++++++
24
target/arm/translate.c | 22 ++++++++++++++++-
25
6 files changed, 87 insertions(+), 20 deletions(-)
26
27
diff --git a/target/arm/helper.h b/target/arm/helper.h
28
index XXXXXXX..XXXXXXX 100644
29
--- a/target/arm/helper.h
30
+++ b/target/arm/helper.h
31
@@ -XXX,XX +XXX,XX @@ DEF_HELPER_FLAGS_3(sel_flags, TCG_CALL_NO_RWG_SE,
32
DEF_HELPER_2(exception_internal, void, env, i32)
33
DEF_HELPER_4(exception_with_syndrome, void, env, i32, i32, i32)
34
DEF_HELPER_2(exception_bkpt_insn, void, env, i32)
35
+DEF_HELPER_2(exception_pc_alignment, noreturn, env, tl)
36
DEF_HELPER_1(setend, void, env)
37
DEF_HELPER_2(wfi, void, env, i32)
38
DEF_HELPER_1(wfe, void, env)
39
diff --git a/target/arm/syndrome.h b/target/arm/syndrome.h
40
index XXXXXXX..XXXXXXX 100644
41
--- a/target/arm/syndrome.h
42
+++ b/target/arm/syndrome.h
43
@@ -XXX,XX +XXX,XX @@ static inline uint32_t syn_illegalstate(void)
44
return (EC_ILLEGALSTATE << ARM_EL_EC_SHIFT) | ARM_EL_IL;
45
}
46
47
+static inline uint32_t syn_pcalignment(void)
48
+{
49
+ return (EC_PCALIGNMENT << ARM_EL_EC_SHIFT) | ARM_EL_IL;
50
+}
51
+
52
#endif /* TARGET_ARM_SYNDROME_H */
53
diff --git a/linux-user/aarch64/cpu_loop.c b/linux-user/aarch64/cpu_loop.c
54
index XXXXXXX..XXXXXXX 100644
55
--- a/linux-user/aarch64/cpu_loop.c
56
+++ b/linux-user/aarch64/cpu_loop.c
57
@@ -XXX,XX +XXX,XX @@ void cpu_loop(CPUARMState *env)
58
break;
59
case EXCP_PREFETCH_ABORT:
60
case EXCP_DATA_ABORT:
61
- /* We should only arrive here with EC in {DATAABORT, INSNABORT}. */
62
ec = syn_get_ec(env->exception.syndrome);
63
- assert(ec == EC_DATAABORT || ec == EC_INSNABORT);
64
-
65
- /* Both EC have the same format for FSC, or close enough. */
66
- fsc = extract32(env->exception.syndrome, 0, 6);
67
- switch (fsc) {
68
- case 0x04 ... 0x07: /* Translation fault, level {0-3} */
69
- si_signo = TARGET_SIGSEGV;
70
- si_code = TARGET_SEGV_MAPERR;
71
+ switch (ec) {
72
+ case EC_DATAABORT:
73
+ case EC_INSNABORT:
74
+ /* Both EC have the same format for FSC, or close enough. */
75
+ fsc = extract32(env->exception.syndrome, 0, 6);
76
+ switch (fsc) {
77
+ case 0x04 ... 0x07: /* Translation fault, level {0-3} */
78
+ si_signo = TARGET_SIGSEGV;
79
+ si_code = TARGET_SEGV_MAPERR;
80
+ break;
81
+ case 0x09 ... 0x0b: /* Access flag fault, level {1-3} */
82
+ case 0x0d ... 0x0f: /* Permission fault, level {1-3} */
83
+ si_signo = TARGET_SIGSEGV;
84
+ si_code = TARGET_SEGV_ACCERR;
85
+ break;
86
+ case 0x11: /* Synchronous Tag Check Fault */
87
+ si_signo = TARGET_SIGSEGV;
88
+ si_code = TARGET_SEGV_MTESERR;
89
+ break;
90
+ case 0x21: /* Alignment fault */
91
+ si_signo = TARGET_SIGBUS;
92
+ si_code = TARGET_BUS_ADRALN;
93
+ break;
94
+ default:
95
+ g_assert_not_reached();
96
+ }
97
break;
98
- case 0x09 ... 0x0b: /* Access flag fault, level {1-3} */
99
- case 0x0d ... 0x0f: /* Permission fault, level {1-3} */
100
- si_signo = TARGET_SIGSEGV;
101
- si_code = TARGET_SEGV_ACCERR;
102
- break;
103
- case 0x11: /* Synchronous Tag Check Fault */
104
- si_signo = TARGET_SIGSEGV;
105
- si_code = TARGET_SEGV_MTESERR;
106
- break;
107
- case 0x21: /* Alignment fault */
108
+ case EC_PCALIGNMENT:
109
si_signo = TARGET_SIGBUS;
110
si_code = TARGET_BUS_ADRALN;
111
break;
112
diff --git a/target/arm/tlb_helper.c b/target/arm/tlb_helper.c
113
index XXXXXXX..XXXXXXX 100644
114
--- a/target/arm/tlb_helper.c
115
+++ b/target/arm/tlb_helper.c
116
@@ -XXX,XX +XXX,XX @@
117
#include "cpu.h"
118
#include "internals.h"
119
#include "exec/exec-all.h"
120
+#include "exec/helper-proto.h"
121
122
static inline uint32_t merge_syn_data_abort(uint32_t template_syn,
123
unsigned int target_el,
124
@@ -XXX,XX +XXX,XX @@ void arm_cpu_do_unaligned_access(CPUState *cs, vaddr vaddr,
125
arm_deliver_fault(cpu, vaddr, access_type, mmu_idx, &fi);
126
}
127
128
+void helper_exception_pc_alignment(CPUARMState *env, target_ulong pc)
129
+{
130
+ ARMMMUFaultInfo fi = { .type = ARMFault_Alignment };
131
+ int target_el = exception_target_el(env);
132
+ int mmu_idx = cpu_mmu_index(env, true);
133
+ uint32_t fsc;
134
+
135
+ env->exception.vaddress = pc;
136
+
137
+ /*
138
+ * Note that the fsc is not applicable to this exception,
139
+ * since any syndrome is pcalignment not insn_abort.
140
+ */
141
+ env->exception.fsr = compute_fsr_fsc(env, &fi, target_el, mmu_idx, &fsc);
142
+ raise_exception(env, EXCP_PREFETCH_ABORT, syn_pcalignment(), target_el);
143
+}
144
+
145
#if !defined(CONFIG_USER_ONLY)
146
147
/*
148
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
149
index XXXXXXX..XXXXXXX 100644
150
--- a/target/arm/translate-a64.c
151
+++ b/target/arm/translate-a64.c
152
@@ -XXX,XX +XXX,XX @@ static void aarch64_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu)
153
uint64_t pc = s->base.pc_next;
154
uint32_t insn;
155
156
+ /* Singlestep exceptions have the highest priority. */
157
if (s->ss_active && !s->pstate_ss) {
158
/* Singlestep state is Active-pending.
159
* If we're in this state at the start of a TB then either
160
@@ -XXX,XX +XXX,XX @@ static void aarch64_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu)
161
return;
162
}
163
164
+ if (pc & 3) {
165
+ /*
166
+ * PC alignment fault. This has priority over the instruction abort
167
+ * that we would receive from a translation fault via arm_ldl_code.
168
+ * This should only be possible after an indirect branch, at the
169
+ * start of the TB.
170
+ */
171
+ assert(s->base.num_insns == 1);
172
+ gen_helper_exception_pc_alignment(cpu_env, tcg_constant_tl(pc));
173
+ s->base.is_jmp = DISAS_NORETURN;
174
+ s->base.pc_next = QEMU_ALIGN_UP(pc, 4);
175
+ return;
176
+ }
177
+
178
s->pc_curr = pc;
179
insn = arm_ldl_code(env, &s->base, pc, s->sctlr_b);
180
s->insn = insn;
181
diff --git a/target/arm/translate.c b/target/arm/translate.c
182
index XXXXXXX..XXXXXXX 100644
183
--- a/target/arm/translate.c
184
+++ b/target/arm/translate.c
185
@@ -XXX,XX +XXX,XX @@ static void arm_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu)
186
uint32_t pc = dc->base.pc_next;
187
unsigned int insn;
188
189
- if (arm_check_ss_active(dc) || arm_check_kernelpage(dc)) {
190
+ /* Singlestep exceptions have the highest priority. */
191
+ if (arm_check_ss_active(dc)) {
192
+ dc->base.pc_next = pc + 4;
193
+ return;
194
+ }
195
+
196
+ if (pc & 3) {
197
+ /*
198
+ * PC alignment fault. This has priority over the instruction abort
199
+ * that we would receive from a translation fault via arm_ldl_code
200
+ * (or the execution of the kernelpage entrypoint). This should only
201
+ * be possible after an indirect branch, at the start of the TB.
202
+ */
203
+ assert(dc->base.num_insns == 1);
204
+ gen_helper_exception_pc_alignment(cpu_env, tcg_constant_tl(pc));
205
+ dc->base.is_jmp = DISAS_NORETURN;
206
+ dc->base.pc_next = QEMU_ALIGN_UP(pc, 4);
207
+ return;
208
+ }
209
+
210
+ if (arm_check_kernelpage(dc)) {
211
dc->base.pc_next = pc + 4;
212
return;
213
}
214
--
215
2.25.1
216
217
diff view generated by jsdifflib
1
From: Guenter Roeck <linux@roeck-us.net>
1
From: Richard Henderson <richard.henderson@linaro.org>
2
2
3
With this patch, the watchdog on i.MX31 emulations is fully operational.
3
Misaligned thumb PC is architecturally impossible.
4
Assert is better than proceeding, in case we've missed
5
something somewhere.
4
6
5
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
7
Expand a comment about aligning the pc in gdbstub.
6
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
8
Fail an incoming migrate if a thumb pc is misaligned.
7
Message-id: 20200517162135.110364-5-linux@roeck-us.net
9
10
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
11
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
8
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
12
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
9
---
13
---
10
include/hw/arm/fsl-imx31.h | 4 ++++
14
target/arm/gdbstub.c | 9 +++++++--
11
hw/arm/fsl-imx31.c | 6 ++++++
15
target/arm/machine.c | 10 ++++++++++
12
hw/arm/Kconfig | 1 +
16
target/arm/translate.c | 3 +++
13
3 files changed, 11 insertions(+)
17
3 files changed, 20 insertions(+), 2 deletions(-)
14
18
15
diff --git a/include/hw/arm/fsl-imx31.h b/include/hw/arm/fsl-imx31.h
19
diff --git a/target/arm/gdbstub.c b/target/arm/gdbstub.c
16
index XXXXXXX..XXXXXXX 100644
20
index XXXXXXX..XXXXXXX 100644
17
--- a/include/hw/arm/fsl-imx31.h
21
--- a/target/arm/gdbstub.c
18
+++ b/include/hw/arm/fsl-imx31.h
22
+++ b/target/arm/gdbstub.c
19
@@ -XXX,XX +XXX,XX @@
23
@@ -XXX,XX +XXX,XX @@ int arm_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
20
#include "hw/timer/imx_epit.h"
24
21
#include "hw/i2c/imx_i2c.h"
25
tmp = ldl_p(mem_buf);
22
#include "hw/gpio/imx_gpio.h"
26
23
+#include "hw/watchdog/wdt_imx2.h"
27
- /* Mask out low bit of PC to workaround gdb bugs. This will probably
24
#include "exec/memory.h"
28
- cause problems if we ever implement the Jazelle DBX extensions. */
25
#include "target/arm/cpu.h"
29
+ /*
26
30
+ * Mask out low bits of PC to workaround gdb bugs.
27
@@ -XXX,XX +XXX,XX @@ typedef struct FslIMX31State {
31
+ * This avoids an assert in thumb_tr_translate_insn, because it is
28
IMXEPITState epit[FSL_IMX31_NUM_EPITS];
32
+ * architecturally impossible to misalign the pc.
29
IMXI2CState i2c[FSL_IMX31_NUM_I2CS];
33
+ * This will probably cause problems if we ever implement the
30
IMXGPIOState gpio[FSL_IMX31_NUM_GPIOS];
34
+ * Jazelle DBX extensions.
31
+ IMX2WdtState wdt;
35
+ */
32
MemoryRegion secure_rom;
36
if (n == 15) {
33
MemoryRegion rom;
37
tmp &= ~1;
34
MemoryRegion iram;
38
}
35
@@ -XXX,XX +XXX,XX @@ typedef struct FslIMX31State {
39
diff --git a/target/arm/machine.c b/target/arm/machine.c
36
#define FSL_IMX31_GPIO1_SIZE 0x4000
37
#define FSL_IMX31_GPIO2_ADDR 0x53FD0000
38
#define FSL_IMX31_GPIO2_SIZE 0x4000
39
+#define FSL_IMX31_WDT_ADDR 0x53FDC000
40
+#define FSL_IMX31_WDT_SIZE 0x4000
41
#define FSL_IMX31_AVIC_ADDR 0x68000000
42
#define FSL_IMX31_AVIC_SIZE 0x100
43
#define FSL_IMX31_SDRAM0_ADDR 0x80000000
44
diff --git a/hw/arm/fsl-imx31.c b/hw/arm/fsl-imx31.c
45
index XXXXXXX..XXXXXXX 100644
40
index XXXXXXX..XXXXXXX 100644
46
--- a/hw/arm/fsl-imx31.c
41
--- a/target/arm/machine.c
47
+++ b/hw/arm/fsl-imx31.c
42
+++ b/target/arm/machine.c
48
@@ -XXX,XX +XXX,XX @@ static void fsl_imx31_init(Object *obj)
43
@@ -XXX,XX +XXX,XX @@ static int cpu_post_load(void *opaque, int version_id)
49
sysbus_init_child_obj(obj, "gpio[*]", &s->gpio[i], sizeof(s->gpio[i]),
44
return -1;
50
TYPE_IMX_GPIO);
45
}
51
}
46
}
52
+
47
+
53
+ sysbus_init_child_obj(obj, "wdt", &s->wdt, sizeof(s->wdt), TYPE_IMX2_WDT);
48
+ /*
54
}
49
+ * Misaligned thumb pc is architecturally impossible.
55
50
+ * We have an assert in thumb_tr_translate_insn to verify this.
56
static void fsl_imx31_realize(DeviceState *dev, Error **errp)
51
+ * Fail an incoming migrate to avoid this assert.
57
@@ -XXX,XX +XXX,XX @@ static void fsl_imx31_realize(DeviceState *dev, Error **errp)
52
+ */
58
gpio_table[i].irq));
53
+ if (!is_a64(env) && env->thumb && (env->regs[15] & 1)) {
54
+ return -1;
55
+ }
56
+
57
if (!kvm_enabled()) {
58
pmu_op_finish(&cpu->env);
59
}
59
}
60
60
diff --git a/target/arm/translate.c b/target/arm/translate.c
61
+ /* Watchdog */
61
index XXXXXXX..XXXXXXX 100644
62
+ object_property_set_bool(OBJECT(&s->wdt), true, "realized", &error_abort);
62
--- a/target/arm/translate.c
63
+ sysbus_mmio_map(SYS_BUS_DEVICE(&s->wdt), 0, FSL_IMX31_WDT_ADDR);
63
+++ b/target/arm/translate.c
64
@@ -XXX,XX +XXX,XX @@ static void thumb_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu)
65
uint32_t insn;
66
bool is_16bit;
67
68
+ /* Misaligned thumb PC is architecturally impossible. */
69
+ assert((dc->base.pc_next & 1) == 0);
64
+
70
+
65
/* On a real system, the first 16k is a `secure boot rom' */
71
if (arm_check_ss_active(dc) || arm_check_kernelpage(dc)) {
66
memory_region_init_rom(&s->secure_rom, OBJECT(dev), "imx31.secure_rom",
72
dc->base.pc_next = pc + 2;
67
FSL_IMX31_SECURE_ROM_SIZE, &err);
73
return;
68
diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig
69
index XXXXXXX..XXXXXXX 100644
70
--- a/hw/arm/Kconfig
71
+++ b/hw/arm/Kconfig
72
@@ -XXX,XX +XXX,XX @@ config FSL_IMX31
73
select SERIAL
74
select IMX
75
select IMX_I2C
76
+ select WDT_IMX2
77
select LAN9118
78
79
config FSL_IMX6
80
--
74
--
81
2.20.1
75
2.25.1
82
76
83
77
diff view generated by jsdifflib
1
From: Guenter Roeck <linux@roeck-us.net>
1
From: Richard Henderson <richard.henderson@linaro.org>
2
2
3
Instantiating PWM, CAN, CAAM, and OCOTP devices is necessary to avoid
3
Both single-step and pc alignment faults have priority over
4
crashes when booting mainline Linux.
4
breakpoint exceptions.
5
5
6
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
6
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
7
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
7
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
8
Message-id: 20200517162135.110364-8-linux@roeck-us.net
9
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
8
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
10
---
9
---
11
include/hw/arm/fsl-imx7.h | 16 ++++++++++++++++
10
target/arm/debug_helper.c | 23 +++++++++++++++++++++++
12
hw/arm/fsl-imx7.c | 24 ++++++++++++++++++++++++
11
1 file changed, 23 insertions(+)
13
2 files changed, 40 insertions(+)
14
12
15
diff --git a/include/hw/arm/fsl-imx7.h b/include/hw/arm/fsl-imx7.h
13
diff --git a/target/arm/debug_helper.c b/target/arm/debug_helper.c
16
index XXXXXXX..XXXXXXX 100644
14
index XXXXXXX..XXXXXXX 100644
17
--- a/include/hw/arm/fsl-imx7.h
15
--- a/target/arm/debug_helper.c
18
+++ b/include/hw/arm/fsl-imx7.h
16
+++ b/target/arm/debug_helper.c
19
@@ -XXX,XX +XXX,XX @@ enum FslIMX7MemoryMap {
17
@@ -XXX,XX +XXX,XX @@ bool arm_debug_check_breakpoint(CPUState *cs)
20
FSL_IMX7_IOMUXC_GPR_ADDR = 0x30340000,
18
{
21
FSL_IMX7_IOMUXCn_SIZE = 0x1000,
19
ARMCPU *cpu = ARM_CPU(cs);
22
20
CPUARMState *env = &cpu->env;
23
+ FSL_IMX7_OCOTP_ADDR = 0x30350000,
21
+ target_ulong pc;
24
+ FSL_IMX7_OCOTP_SIZE = 0x10000,
22
int n;
25
+
23
26
FSL_IMX7_ANALOG_ADDR = 0x30360000,
24
/*
27
FSL_IMX7_SNVS_ADDR = 0x30370000,
25
@@ -XXX,XX +XXX,XX @@ bool arm_debug_check_breakpoint(CPUState *cs)
28
FSL_IMX7_CCM_ADDR = 0x30380000,
26
return false;
29
@@ -XXX,XX +XXX,XX @@ enum FslIMX7MemoryMap {
27
}
30
FSL_IMX7_ADC2_ADDR = 0x30620000,
31
FSL_IMX7_ADCn_SIZE = 0x1000,
32
33
+ FSL_IMX7_PWM1_ADDR = 0x30660000,
34
+ FSL_IMX7_PWM2_ADDR = 0x30670000,
35
+ FSL_IMX7_PWM3_ADDR = 0x30680000,
36
+ FSL_IMX7_PWM4_ADDR = 0x30690000,
37
+ FSL_IMX7_PWMn_SIZE = 0x10000,
38
+
39
FSL_IMX7_PCIE_PHY_ADDR = 0x306D0000,
40
FSL_IMX7_PCIE_PHY_SIZE = 0x10000,
41
42
FSL_IMX7_GPC_ADDR = 0x303A0000,
43
44
+ FSL_IMX7_CAAM_ADDR = 0x30900000,
45
+ FSL_IMX7_CAAM_SIZE = 0x40000,
46
+
47
+ FSL_IMX7_CAN1_ADDR = 0x30A00000,
48
+ FSL_IMX7_CAN2_ADDR = 0x30A10000,
49
+ FSL_IMX7_CANn_SIZE = 0x10000,
50
+
51
FSL_IMX7_I2C1_ADDR = 0x30A20000,
52
FSL_IMX7_I2C2_ADDR = 0x30A30000,
53
FSL_IMX7_I2C3_ADDR = 0x30A40000,
54
diff --git a/hw/arm/fsl-imx7.c b/hw/arm/fsl-imx7.c
55
index XXXXXXX..XXXXXXX 100644
56
--- a/hw/arm/fsl-imx7.c
57
+++ b/hw/arm/fsl-imx7.c
58
@@ -XXX,XX +XXX,XX @@ static void fsl_imx7_realize(DeviceState *dev, Error **errp)
59
*/
60
create_unimplemented_device("sdma", FSL_IMX7_SDMA_ADDR, FSL_IMX7_SDMA_SIZE);
61
28
62
+ /*
29
+ /*
63
+ * CAAM
30
+ * Single-step exceptions have priority over breakpoint exceptions.
31
+ * If single-step state is active-pending, suppress the bp.
64
+ */
32
+ */
65
+ create_unimplemented_device("caam", FSL_IMX7_CAAM_ADDR, FSL_IMX7_CAAM_SIZE);
33
+ if (arm_singlestep_active(env) && !(env->pstate & PSTATE_SS)) {
34
+ return false;
35
+ }
66
+
36
+
67
+ /*
37
+ /*
68
+ * PWM
38
+ * PC alignment faults have priority over breakpoint exceptions.
69
+ */
39
+ */
70
+ create_unimplemented_device("pwm1", FSL_IMX7_PWM1_ADDR, FSL_IMX7_PWMn_SIZE);
40
+ pc = is_a64(env) ? env->pc : env->regs[15];
71
+ create_unimplemented_device("pwm2", FSL_IMX7_PWM2_ADDR, FSL_IMX7_PWMn_SIZE);
41
+ if ((is_a64(env) || !env->thumb) && (pc & 3) != 0) {
72
+ create_unimplemented_device("pwm3", FSL_IMX7_PWM3_ADDR, FSL_IMX7_PWMn_SIZE);
42
+ return false;
73
+ create_unimplemented_device("pwm4", FSL_IMX7_PWM4_ADDR, FSL_IMX7_PWMn_SIZE);
43
+ }
74
+
44
+
75
+ /*
45
+ /*
76
+ * CAN
46
+ * Instruction aborts have priority over breakpoint exceptions.
47
+ * TODO: We would need to look up the page for PC and verify that
48
+ * it is present and executable.
77
+ */
49
+ */
78
+ create_unimplemented_device("can1", FSL_IMX7_CAN1_ADDR, FSL_IMX7_CANn_SIZE);
79
+ create_unimplemented_device("can2", FSL_IMX7_CAN2_ADDR, FSL_IMX7_CANn_SIZE);
80
+
50
+
81
+ /*
51
for (n = 0; n < ARRAY_SIZE(env->cpu_breakpoint); n++) {
82
+ * OCOTP
52
if (bp_wp_matches(cpu, n, false)) {
83
+ */
53
return true;
84
+ create_unimplemented_device("ocotp", FSL_IMX7_OCOTP_ADDR,
85
+ FSL_IMX7_OCOTP_SIZE);
86
87
object_property_set_bool(OBJECT(&s->gpr), true, "realized",
88
&error_abort);
89
--
54
--
90
2.20.1
55
2.25.1
91
56
92
57
diff view generated by jsdifflib
1
Provide a minimal documentation of the Versatile Express boards
1
From: Richard Henderson <richard.henderson@linaro.org>
2
(vexpress-a9, vexpress-a15).
3
2
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
5
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
5
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
6
Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
7
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
8
Message-id: 20200507151819.28444-4-peter.maydell@linaro.org
9
---
6
---
10
docs/system/arm/vexpress.rst | 60 ++++++++++++++++++++++++++++++++++++
7
tests/tcg/aarch64/pcalign-a64.c | 37 +++++++++++++++++++++++++
11
docs/system/target-arm.rst | 1 +
8
tests/tcg/arm/pcalign-a32.c | 46 +++++++++++++++++++++++++++++++
12
MAINTAINERS | 1 +
9
tests/tcg/aarch64/Makefile.target | 4 +--
13
3 files changed, 62 insertions(+)
10
tests/tcg/arm/Makefile.target | 4 +++
14
create mode 100644 docs/system/arm/vexpress.rst
11
4 files changed, 89 insertions(+), 2 deletions(-)
12
create mode 100644 tests/tcg/aarch64/pcalign-a64.c
13
create mode 100644 tests/tcg/arm/pcalign-a32.c
15
14
16
diff --git a/docs/system/arm/vexpress.rst b/docs/system/arm/vexpress.rst
15
diff --git a/tests/tcg/aarch64/pcalign-a64.c b/tests/tcg/aarch64/pcalign-a64.c
17
new file mode 100644
16
new file mode 100644
18
index XXXXXXX..XXXXXXX
17
index XXXXXXX..XXXXXXX
19
--- /dev/null
18
--- /dev/null
20
+++ b/docs/system/arm/vexpress.rst
19
+++ b/tests/tcg/aarch64/pcalign-a64.c
21
@@ -XXX,XX +XXX,XX @@
20
@@ -XXX,XX +XXX,XX @@
22
+Arm Versatile Express boards (``vexpress-a9``, ``vexpress-a15``)
21
+/* Test PC misalignment exception */
23
+================================================================
24
+
22
+
25
+QEMU models two variants of the Arm Versatile Express development
23
+#include <assert.h>
26
+board family:
24
+#include <signal.h>
25
+#include <stdlib.h>
26
+#include <stdio.h>
27
+
27
+
28
+- ``vexpress-a9`` models the combination of the Versatile Express
28
+static void *expected;
29
+ motherboard and the CoreTile Express A9x4 daughterboard
30
+- ``vexpress-a15`` models the combination of the Versatile Express
31
+ motherboard and the CoreTile Express A15x2 daughterboard
32
+
29
+
33
+Note that as this hardware does not have PCI, IDE or SCSI,
30
+static void sigbus(int sig, siginfo_t *info, void *vuc)
34
+the only available storage option is emulated SD card.
31
+{
32
+ assert(info->si_code == BUS_ADRALN);
33
+ assert(info->si_addr == expected);
34
+ exit(EXIT_SUCCESS);
35
+}
35
+
36
+
36
+Implemented devices:
37
+int main()
38
+{
39
+ void *tmp;
37
+
40
+
38
+- PL041 audio
41
+ struct sigaction sa = {
39
+- PL181 SD controller
42
+ .sa_sigaction = sigbus,
40
+- PL050 keyboard and mouse
43
+ .sa_flags = SA_SIGINFO
41
+- PL011 UARTs
44
+ };
42
+- SP804 timers
43
+- I2C controller
44
+- PL031 RTC
45
+- PL111 LCD display controller
46
+- Flash memory
47
+- LAN9118 ethernet
48
+
45
+
49
+Unimplemented devices:
46
+ if (sigaction(SIGBUS, &sa, NULL) < 0) {
47
+ perror("sigaction");
48
+ return EXIT_FAILURE;
49
+ }
50
+
50
+
51
+- SP810 system control block
51
+ asm volatile("adr %0, 1f + 1\n\t"
52
+- PCI-express
52
+ "str %0, %1\n\t"
53
+- USB controller (Philips ISP1761)
53
+ "br %0\n"
54
+- Local DAP ROM
54
+ "1:"
55
+- CoreSight interfaces
55
+ : "=&r"(tmp), "=m"(expected));
56
+- PL301 AXI interconnect
56
+ abort();
57
+- SCC
57
+}
58
+- System counter
58
diff --git a/tests/tcg/arm/pcalign-a32.c b/tests/tcg/arm/pcalign-a32.c
59
+- HDLCD controller (``vexpress-a15``)
59
new file mode 100644
60
+- SP805 watchdog
60
index XXXXXXX..XXXXXXX
61
+- PL341 dynamic memory controller
61
--- /dev/null
62
+- DMA330 DMA controller
62
+++ b/tests/tcg/arm/pcalign-a32.c
63
+- PL354 static memory controller
63
@@ -XXX,XX +XXX,XX @@
64
+- BP147 TrustZone Protection Controller
64
+/* Test PC misalignment exception */
65
+- TrustZone Address Space Controller
66
+
65
+
67
+Other differences between the hardware and the QEMU model:
66
+#ifdef __thumb__
67
+#error "This test must be compiled for ARM"
68
+#endif
68
+
69
+
69
+- QEMU will default to creating one CPU unless you pass a different
70
+#include <assert.h>
70
+ ``-smp`` argument
71
+#include <signal.h>
71
+- QEMU allows the amount of RAM provided to be specified with the
72
+#include <stdlib.h>
72
+ ``-m`` argument
73
+#include <stdio.h>
73
+- QEMU defaults to providing a CPU which does not provide either
74
+
74
+ TrustZone or the Virtualization Extensions: if you want these you
75
+static void *expected;
75
+ must enable them with ``-machine secure=on`` and ``-machine
76
+
76
+ virtualization=on``
77
+static void sigbus(int sig, siginfo_t *info, void *vuc)
77
+- QEMU provides 4 virtio-mmio virtio transports; these start at
78
+{
78
+ address ``0x10013000`` for ``vexpress-a9`` and at ``0x1c130000`` for
79
+ assert(info->si_code == BUS_ADRALN);
79
+ ``vexpress-a15``, and have IRQs from 40 upwards. If a dtb is
80
+ assert(info->si_addr == expected);
80
+ provided on the command line then QEMU will edit it to include
81
+ exit(EXIT_SUCCESS);
81
+ suitable entries describing these transports for the guest.
82
+}
82
diff --git a/docs/system/target-arm.rst b/docs/system/target-arm.rst
83
+
84
+int main()
85
+{
86
+ void *tmp;
87
+
88
+ struct sigaction sa = {
89
+ .sa_sigaction = sigbus,
90
+ .sa_flags = SA_SIGINFO
91
+ };
92
+
93
+ if (sigaction(SIGBUS, &sa, NULL) < 0) {
94
+ perror("sigaction");
95
+ return EXIT_FAILURE;
96
+ }
97
+
98
+ asm volatile("adr %0, 1f + 2\n\t"
99
+ "str %0, %1\n\t"
100
+ "bx %0\n"
101
+ "1:"
102
+ : "=&r"(tmp), "=m"(expected));
103
+
104
+ /*
105
+ * From v8, it is CONSTRAINED UNPREDICTABLE whether BXWritePC aligns
106
+ * the address or not. If so, we can legitimately fall through.
107
+ */
108
+ return EXIT_SUCCESS;
109
+}
110
diff --git a/tests/tcg/aarch64/Makefile.target b/tests/tcg/aarch64/Makefile.target
83
index XXXXXXX..XXXXXXX 100644
111
index XXXXXXX..XXXXXXX 100644
84
--- a/docs/system/target-arm.rst
112
--- a/tests/tcg/aarch64/Makefile.target
85
+++ b/docs/system/target-arm.rst
113
+++ b/tests/tcg/aarch64/Makefile.target
86
@@ -XXX,XX +XXX,XX @@ undocumented; you can get a complete list by running
114
@@ -XXX,XX +XXX,XX @@ VPATH         += $(ARM_SRC)
87
arm/integratorcp
115
AARCH64_SRC=$(SRC_PATH)/tests/tcg/aarch64
88
arm/realview
116
VPATH         += $(AARCH64_SRC)
89
arm/versatile
117
90
+ arm/vexpress
118
-# Float-convert Tests
91
arm/musicpal
119
-AARCH64_TESTS=fcvt
92
arm/nseries
120
+# Base architecture tests
93
arm/orangepi
121
+AARCH64_TESTS=fcvt pcalign-a64
94
diff --git a/MAINTAINERS b/MAINTAINERS
122
123
fcvt: LDFLAGS+=-lm
124
125
diff --git a/tests/tcg/arm/Makefile.target b/tests/tcg/arm/Makefile.target
95
index XXXXXXX..XXXXXXX 100644
126
index XXXXXXX..XXXXXXX 100644
96
--- a/MAINTAINERS
127
--- a/tests/tcg/arm/Makefile.target
97
+++ b/MAINTAINERS
128
+++ b/tests/tcg/arm/Makefile.target
98
@@ -XXX,XX +XXX,XX @@ M: Peter Maydell <peter.maydell@linaro.org>
129
@@ -XXX,XX +XXX,XX @@ run-fcvt: fcvt
99
L: qemu-arm@nongnu.org
130
    $(call run-test,fcvt,$(QEMU) $<,"$< on $(TARGET_NAME)")
100
S: Maintained
131
    $(call diff-out,fcvt,$(ARM_SRC)/fcvt.ref)
101
F: hw/arm/vexpress.c
132
102
+F: docs/system/arm/vexpress.rst
133
+# PC alignment test
103
134
+ARM_TESTS += pcalign-a32
104
Versatile PB
135
+pcalign-a32: CFLAGS+=-marm
105
M: Peter Maydell <peter.maydell@linaro.org>
136
+
137
ifeq ($(CONFIG_ARM_COMPATIBLE_SEMIHOSTING),y)
138
139
# Semihosting smoke test for linux-user
106
--
140
--
107
2.20.1
141
2.25.1
108
142
109
143
diff view generated by jsdifflib
1
Add basic documentation of the MPS2 board models.
1
In the SSE decode function gen_sse(), we combine a byte
2
'b' and a value 'b1' which can be [0..3], and switch on them:
3
b |= (b1 << 8);
4
switch (b) {
5
...
6
default:
7
unknown_op:
8
gen_unknown_opcode(env, s);
9
return;
10
}
2
11
12
In three cases inside this switch, we were then also checking for
13
"if (b1 >= 2) { goto unknown_op; }".
14
However, this can never happen, because the 'case' values in each place
15
are 0x0nn or 0x1nn and the switch will have directed the b1 == (2, 3)
16
cases to the default already.
17
18
This check was added in commit c045af25a52e9 in 2010; the added code
19
was unnecessary then as well, and was apparently intended only to
20
ensure that we never accidentally ended up indexing off the end
21
of an sse_op_table with only 2 entries as a result of future bugs
22
in the decode logic.
23
24
Change the checks to assert() instead, and make sure they're always
25
immediately before the array access they are protecting.
26
27
Fixes: Coverity CID 1460207
3
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
28
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
4
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
29
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
5
Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
6
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
7
Message-id: 20200507151819.28444-5-peter.maydell@linaro.org
8
---
30
---
9
docs/system/arm/mps2.rst | 29 +++++++++++++++++++++++++++++
31
target/i386/tcg/translate.c | 12 +++---------
10
docs/system/target-arm.rst | 1 +
32
1 file changed, 3 insertions(+), 9 deletions(-)
11
MAINTAINERS | 1 +
12
3 files changed, 31 insertions(+)
13
create mode 100644 docs/system/arm/mps2.rst
14
33
15
diff --git a/docs/system/arm/mps2.rst b/docs/system/arm/mps2.rst
34
diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c
16
new file mode 100644
17
index XXXXXXX..XXXXXXX
18
--- /dev/null
19
+++ b/docs/system/arm/mps2.rst
20
@@ -XXX,XX +XXX,XX @@
21
+Arm MPS2 boards (``mps2-an385``, ``mps2-an505``, ``mps2-an511``, ``mps2-an521``)
22
+================================================================================
23
+
24
+These board models all use Arm M-profile CPUs.
25
+
26
+The Arm MPS2 and MPS2+ dev boards are FPGA based (the 2+ has a bigger
27
+FPGA but is otherwise the same as the 2). Since the CPU itself
28
+and most of the devices are in the FPGA, the details of the board
29
+as seen by the guest depend significantly on the FPGA image.
30
+
31
+QEMU models the following FPGA images:
32
+
33
+``mps2-an385``
34
+ Cortex-M3 as documented in ARM Application Note AN385
35
+``mps2-an511``
36
+ Cortex-M3 'DesignStart' as documented in AN511
37
+``mps2-an505``
38
+ Cortex-M33 as documented in ARM Application Note AN505
39
+``mps2-an521``
40
+ Dual Cortex-M33 as documented in Application Note AN521
41
+
42
+Differences between QEMU and real hardware:
43
+
44
+- AN385 remapping of low 16K of memory to either ZBT SSRAM1 or to
45
+ block RAM is unimplemented (QEMU always maps this to ZBT SSRAM1, as
46
+ if zbt_boot_ctrl is always zero)
47
+- QEMU provides a LAN9118 ethernet rather than LAN9220; the only guest
48
+ visible difference is that the LAN9118 doesn't support checksum
49
+ offloading
50
diff --git a/docs/system/target-arm.rst b/docs/system/target-arm.rst
51
index XXXXXXX..XXXXXXX 100644
35
index XXXXXXX..XXXXXXX 100644
52
--- a/docs/system/target-arm.rst
36
--- a/target/i386/tcg/translate.c
53
+++ b/docs/system/target-arm.rst
37
+++ b/target/i386/tcg/translate.c
54
@@ -XXX,XX +XXX,XX @@ undocumented; you can get a complete list by running
38
@@ -XXX,XX +XXX,XX @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
55
:maxdepth: 1
39
case 0x171: /* shift xmm, im */
56
40
case 0x172:
57
arm/integratorcp
41
case 0x173:
58
+ arm/mps2
42
- if (b1 >= 2) {
59
arm/realview
43
- goto unknown_op;
60
arm/versatile
44
- }
61
arm/vexpress
45
val = x86_ldub_code(env, s);
62
diff --git a/MAINTAINERS b/MAINTAINERS
46
if (is_xmm) {
63
index XXXXXXX..XXXXXXX 100644
47
tcg_gen_movi_tl(s->T0, val);
64
--- a/MAINTAINERS
48
@@ -XXX,XX +XXX,XX @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
65
+++ b/MAINTAINERS
49
offsetof(CPUX86State, mmx_t0.MMX_L(1)));
66
@@ -XXX,XX +XXX,XX @@ F: hw/misc/armsse-cpuid.c
50
op1_offset = offsetof(CPUX86State,mmx_t0);
67
F: include/hw/misc/armsse-cpuid.h
51
}
68
F: hw/misc/armsse-mhu.c
52
+ assert(b1 < 2);
69
F: include/hw/misc/armsse-mhu.h
53
sse_fn_epp = sse_op_table2[((b - 1) & 3) * 8 +
70
+F: docs/system/arm/mps2.rst
54
(((modrm >> 3)) & 7)][b1];
71
55
if (!sse_fn_epp) {
72
Musca
56
@@ -XXX,XX +XXX,XX @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
73
M: Peter Maydell <peter.maydell@linaro.org>
57
rm = modrm & 7;
58
reg = ((modrm >> 3) & 7) | REX_R(s);
59
mod = (modrm >> 6) & 3;
60
- if (b1 >= 2) {
61
- goto unknown_op;
62
- }
63
64
+ assert(b1 < 2);
65
sse_fn_epp = sse_op_table6[b].op[b1];
66
if (!sse_fn_epp) {
67
goto unknown_op;
68
@@ -XXX,XX +XXX,XX @@ static void gen_sse(CPUX86State *env, DisasContext *s, int b,
69
rm = modrm & 7;
70
reg = ((modrm >> 3) & 7) | REX_R(s);
71
mod = (modrm >> 6) & 3;
72
- if (b1 >= 2) {
73
- goto unknown_op;
74
- }
75
76
+ assert(b1 < 2);
77
sse_fn_eppi = sse_op_table7[b].op[b1];
78
if (!sse_fn_eppi) {
79
goto unknown_op;
74
--
80
--
75
2.20.1
81
2.25.1
76
82
77
83
diff view generated by jsdifflib
1
Add 'Arm' to the Integrator/CP document title, for consistency with
1
The qemu-common.h header is not supposed to be included from any
2
the titling of the other documentation of Arm devboard models
2
other header files, only from .c files (as documented in a comment at
3
(versatile, realview).
3
the start of it).
4
5
include/hw/i386/x86.h and include/hw/i386/microvm.h break this rule.
6
In fact, the include is not required at all, so we can just drop it
7
from both files.
4
8
5
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
9
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
6
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
10
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
7
Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
11
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
8
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
12
Message-id: 20211129200510.1233037-2-peter.maydell@linaro.org
9
Message-id: 20200507151819.28444-2-peter.maydell@linaro.org
10
---
13
---
11
docs/system/arm/integratorcp.rst | 4 ++--
14
include/hw/i386/microvm.h | 1 -
12
1 file changed, 2 insertions(+), 2 deletions(-)
15
include/hw/i386/x86.h | 1 -
16
2 files changed, 2 deletions(-)
13
17
14
diff --git a/docs/system/arm/integratorcp.rst b/docs/system/arm/integratorcp.rst
18
diff --git a/include/hw/i386/microvm.h b/include/hw/i386/microvm.h
15
index XXXXXXX..XXXXXXX 100644
19
index XXXXXXX..XXXXXXX 100644
16
--- a/docs/system/arm/integratorcp.rst
20
--- a/include/hw/i386/microvm.h
17
+++ b/docs/system/arm/integratorcp.rst
21
+++ b/include/hw/i386/microvm.h
18
@@ -XXX,XX +XXX,XX @@
22
@@ -XXX,XX +XXX,XX @@
19
-Integrator/CP (``integratorcp``)
23
#ifndef HW_I386_MICROVM_H
20
-================================
24
#define HW_I386_MICROVM_H
21
+Arm Integrator/CP (``integratorcp``)
25
22
+====================================
26
-#include "qemu-common.h"
23
27
#include "exec/hwaddr.h"
24
The Arm Integrator/CP board is emulated with the following devices:
28
#include "qemu/notify.h"
29
30
diff --git a/include/hw/i386/x86.h b/include/hw/i386/x86.h
31
index XXXXXXX..XXXXXXX 100644
32
--- a/include/hw/i386/x86.h
33
+++ b/include/hw/i386/x86.h
34
@@ -XXX,XX +XXX,XX @@
35
#ifndef HW_I386_X86_H
36
#define HW_I386_X86_H
37
38
-#include "qemu-common.h"
39
#include "exec/hwaddr.h"
40
#include "qemu/notify.h"
25
41
26
--
42
--
27
2.20.1
43
2.25.1
28
44
29
45
diff view generated by jsdifflib
1
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
1
The qemu-common.h header is not supposed to be included from any
2
other header files, only from .c files (as documented in a comment at
3
the start of it).
2
4
3
hw_error() calls exit(). This a bit overkill when we can log
5
Move the include to linux-user/hexagon/cpu_loop.c, which needs it for
4
the accesses as unimplemented or guest error.
6
the declaration of cpu_exec_step_atomic().
5
7
6
When fuzzing the devices, we don't want the whole process to
8
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
7
exit. Replace some hw_error() calls by qemu_log_mask().
9
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
10
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
11
Reviewed-by: Taylor Simpson <tsimpson@quicinc.com>
12
Message-id: 20211129200510.1233037-3-peter.maydell@linaro.org
13
---
14
target/hexagon/cpu.h | 1 -
15
linux-user/hexagon/cpu_loop.c | 1 +
16
2 files changed, 1 insertion(+), 1 deletion(-)
8
17
9
Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
18
diff --git a/target/hexagon/cpu.h b/target/hexagon/cpu.h
10
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
11
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
12
Message-id: 20200518140309.5220-4-f4bug@amsat.org
13
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
14
---
15
hw/char/xilinx_uartlite.c | 5 +++--
16
1 file changed, 3 insertions(+), 2 deletions(-)
17
18
diff --git a/hw/char/xilinx_uartlite.c b/hw/char/xilinx_uartlite.c
19
index XXXXXXX..XXXXXXX 100644
19
index XXXXXXX..XXXXXXX 100644
20
--- a/hw/char/xilinx_uartlite.c
20
--- a/target/hexagon/cpu.h
21
+++ b/hw/char/xilinx_uartlite.c
21
+++ b/target/hexagon/cpu.h
22
@@ -XXX,XX +XXX,XX @@ typedef struct CPUHexagonState CPUHexagonState;
23
24
#include "fpu/softfloat-types.h"
25
26
-#include "qemu-common.h"
27
#include "exec/cpu-defs.h"
28
#include "hex_regs.h"
29
#include "mmvec/mmvec.h"
30
diff --git a/linux-user/hexagon/cpu_loop.c b/linux-user/hexagon/cpu_loop.c
31
index XXXXXXX..XXXXXXX 100644
32
--- a/linux-user/hexagon/cpu_loop.c
33
+++ b/linux-user/hexagon/cpu_loop.c
22
@@ -XXX,XX +XXX,XX @@
34
@@ -XXX,XX +XXX,XX @@
23
*/
35
*/
24
36
25
#include "qemu/osdep.h"
37
#include "qemu/osdep.h"
26
-#include "hw/hw.h"
38
+#include "qemu-common.h"
27
+#include "qemu/log.h"
39
#include "qemu.h"
28
#include "hw/irq.h"
40
#include "user-internals.h"
29
#include "hw/qdev-properties.h"
41
#include "cpu_loop-common.h"
30
#include "hw/sysbus.h"
31
@@ -XXX,XX +XXX,XX @@ uart_write(void *opaque, hwaddr addr,
32
switch (addr)
33
{
34
case R_STATUS:
35
- hw_error("write to UART STATUS?\n");
36
+ qemu_log_mask(LOG_GUEST_ERROR, "%s: write to UART STATUS\n",
37
+ __func__);
38
break;
39
40
case R_CTRL:
41
--
42
--
42
2.20.1
43
2.25.1
43
44
44
45
diff view generated by jsdifflib
1
The Arm signal-handling code has some parts ifdeffed with a
1
The qemu-common.h header is not supposed to be included from any
2
TARGET_CONFIG_CPU_32, which is always defined. This is a leftover
2
other header files, only from .c files (as documented in a comment at
3
from when this code's structure was based on the Linux kernel
3
the start of it).
4
signal handling code, where it was intended to support 26-bit
5
Arm CPUs. The kernel dropped its CONFIG_CPU_32 in kernel commit
6
4da8b8208eded0ba21e3 in 2009.
7
4
8
QEMU has never had 26-bit CPU support and is unlikely to ever
5
Nothing actually relies on target/rx/cpu.h including it, so we can
9
add it; we certainly aren't going to support 26-bit Linux
6
just drop the include.
10
binaries via linux-user mode. The ifdef is just unhelpful
11
noise, so remove it entirely.
12
7
13
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
8
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
14
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
9
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
15
Message-id: 20200518143014.20689-1-peter.maydell@linaro.org
10
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
11
Reviewed-by: Taylor Simpson <tsimpson@quicinc.com>
12
Reviewed-by: Yoshinori Sato <ysato@users.sourceforge.jp>
13
Message-id: 20211129200510.1233037-4-peter.maydell@linaro.org
16
---
14
---
17
linux-user/arm/signal.c | 6 ------
15
target/rx/cpu.h | 1 -
18
1 file changed, 6 deletions(-)
16
1 file changed, 1 deletion(-)
19
17
20
diff --git a/linux-user/arm/signal.c b/linux-user/arm/signal.c
18
diff --git a/target/rx/cpu.h b/target/rx/cpu.h
21
index XXXXXXX..XXXXXXX 100644
19
index XXXXXXX..XXXXXXX 100644
22
--- a/linux-user/arm/signal.c
20
--- a/target/rx/cpu.h
23
+++ b/linux-user/arm/signal.c
21
+++ b/target/rx/cpu.h
24
@@ -XXX,XX +XXX,XX @@ struct rt_sigframe_v2
22
@@ -XXX,XX +XXX,XX @@
25
abi_ulong retcode[4];
23
#define RX_CPU_H
26
};
24
27
25
#include "qemu/bitops.h"
28
-#define TARGET_CONFIG_CPU_32 1
26
-#include "qemu-common.h"
29
-
27
#include "hw/registerfields.h"
30
/*
28
#include "cpu-qom.h"
31
* For ARM syscalls, we encode the syscall number into the instruction.
32
*/
33
@@ -XXX,XX +XXX,XX @@ setup_sigcontext(struct target_sigcontext *sc, /*struct _fpstate *fpstate,*/
34
__put_user(env->regs[13], &sc->arm_sp);
35
__put_user(env->regs[14], &sc->arm_lr);
36
__put_user(env->regs[15], &sc->arm_pc);
37
-#ifdef TARGET_CONFIG_CPU_32
38
__put_user(cpsr_read(env), &sc->arm_cpsr);
39
-#endif
40
41
__put_user(/* current->thread.trap_no */ 0, &sc->trap_no);
42
__put_user(/* current->thread.error_code */ 0, &sc->error_code);
43
@@ -XXX,XX +XXX,XX @@ restore_sigcontext(CPUARMState *env, struct target_sigcontext *sc)
44
__get_user(env->regs[13], &sc->arm_sp);
45
__get_user(env->regs[14], &sc->arm_lr);
46
__get_user(env->regs[15], &sc->arm_pc);
47
-#ifdef TARGET_CONFIG_CPU_32
48
__get_user(cpsr, &sc->arm_cpsr);
49
cpsr_write(env, cpsr, CPSR_USER | CPSR_EXEC, CPSRWriteByInstr);
50
arm_rebuild_hflags(env);
51
-#endif
52
53
err |= !valid_user_regs(env);
54
29
55
--
30
--
56
2.20.1
31
2.25.1
57
32
58
33
diff view generated by jsdifflib
1
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
1
A lot of C files in hw/arm include qemu-common.h when they don't
2
need anything from it. Drop the include lines.
2
3
3
hw_error() calls exit(). This a bit overkill when we can log
4
omap1.c, pxa2xx.c and strongarm.c retain the include because they
4
the accesses as unimplemented or guest error.
5
use it for the prototype of qemu_get_timedate().
5
6
6
When fuzzing the devices, we don't want the whole process to
7
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
7
exit. Replace some hw_error() calls by qemu_log_mask().
8
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
9
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
10
Reviewed-by: Taylor Simpson <tsimpson@quicinc.com>
11
Reviewed-by: Yoshinori Sato <ysato@users.sourceforge.jp>
12
Message-id: 20211129200510.1233037-5-peter.maydell@linaro.org
13
---
14
hw/arm/boot.c | 1 -
15
hw/arm/digic_boards.c | 1 -
16
hw/arm/highbank.c | 1 -
17
hw/arm/npcm7xx_boards.c | 1 -
18
hw/arm/sbsa-ref.c | 1 -
19
hw/arm/stm32f405_soc.c | 1 -
20
hw/arm/vexpress.c | 1 -
21
hw/arm/virt.c | 1 -
22
8 files changed, 8 deletions(-)
8
23
9
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
24
diff --git a/hw/arm/boot.c b/hw/arm/boot.c
10
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
11
Message-id: 20200518140309.5220-3-f4bug@amsat.org
12
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
13
---
14
hw/arm/pxa2xx_gpio.c | 7 ++++---
15
hw/display/pxa2xx_lcd.c | 8 +++++---
16
hw/dma/pxa2xx_dma.c | 14 +++++++++-----
17
3 files changed, 18 insertions(+), 11 deletions(-)
18
19
diff --git a/hw/arm/pxa2xx_gpio.c b/hw/arm/pxa2xx_gpio.c
20
index XXXXXXX..XXXXXXX 100644
25
index XXXXXXX..XXXXXXX 100644
21
--- a/hw/arm/pxa2xx_gpio.c
26
--- a/hw/arm/boot.c
22
+++ b/hw/arm/pxa2xx_gpio.c
27
+++ b/hw/arm/boot.c
23
@@ -XXX,XX +XXX,XX @@
24
25
#include "qemu/osdep.h"
26
#include "cpu.h"
27
-#include "hw/hw.h"
28
#include "hw/irq.h"
29
#include "hw/qdev-properties.h"
30
#include "hw/sysbus.h"
31
@@ -XXX,XX +XXX,XX @@ static uint64_t pxa2xx_gpio_read(void *opaque, hwaddr offset,
32
return s->status[bank];
33
34
default:
35
- hw_error("%s: Bad offset " REG_FMT "\n", __func__, offset);
36
+ qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad offset 0x%" HWADDR_PRIX "\n",
37
+ __func__, offset);
38
}
39
40
return 0;
41
@@ -XXX,XX +XXX,XX @@ static void pxa2xx_gpio_write(void *opaque, hwaddr offset,
42
break;
43
44
default:
45
- hw_error("%s: Bad offset " REG_FMT "\n", __func__, offset);
46
+ qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad offset 0x%" HWADDR_PRIX "\n",
47
+ __func__, offset);
48
}
49
}
50
51
diff --git a/hw/display/pxa2xx_lcd.c b/hw/display/pxa2xx_lcd.c
52
index XXXXXXX..XXXXXXX 100644
53
--- a/hw/display/pxa2xx_lcd.c
54
+++ b/hw/display/pxa2xx_lcd.c
55
@@ -XXX,XX +XXX,XX @@
28
@@ -XXX,XX +XXX,XX @@
56
*/
29
*/
57
30
58
#include "qemu/osdep.h"
31
#include "qemu/osdep.h"
59
-#include "hw/hw.h"
32
-#include "qemu-common.h"
60
+#include "qemu/log.h"
33
#include "qemu/datadir.h"
61
#include "hw/irq.h"
34
#include "qemu/error-report.h"
62
#include "migration/vmstate.h"
35
#include "qapi/error.h"
63
#include "ui/console.h"
36
diff --git a/hw/arm/digic_boards.c b/hw/arm/digic_boards.c
64
@@ -XXX,XX +XXX,XX @@ static uint64_t pxa2xx_lcdc_read(void *opaque, hwaddr offset,
65
66
default:
67
fail:
68
- hw_error("%s: Bad offset " REG_FMT "\n", __func__, offset);
69
+ qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad offset 0x%" HWADDR_PRIX "\n",
70
+ __func__, offset);
71
}
72
73
return 0;
74
@@ -XXX,XX +XXX,XX @@ static void pxa2xx_lcdc_write(void *opaque, hwaddr offset,
75
76
default:
77
fail:
78
- hw_error("%s: Bad offset " REG_FMT "\n", __func__, offset);
79
+ qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad offset 0x%" HWADDR_PRIX "\n",
80
+ __func__, offset);
81
}
82
}
83
84
diff --git a/hw/dma/pxa2xx_dma.c b/hw/dma/pxa2xx_dma.c
85
index XXXXXXX..XXXXXXX 100644
37
index XXXXXXX..XXXXXXX 100644
86
--- a/hw/dma/pxa2xx_dma.c
38
--- a/hw/arm/digic_boards.c
87
+++ b/hw/dma/pxa2xx_dma.c
39
+++ b/hw/arm/digic_boards.c
40
@@ -XXX,XX +XXX,XX @@
41
42
#include "qemu/osdep.h"
43
#include "qapi/error.h"
44
-#include "qemu-common.h"
45
#include "qemu/datadir.h"
46
#include "hw/boards.h"
47
#include "qemu/error-report.h"
48
diff --git a/hw/arm/highbank.c b/hw/arm/highbank.c
49
index XXXXXXX..XXXXXXX 100644
50
--- a/hw/arm/highbank.c
51
+++ b/hw/arm/highbank.c
88
@@ -XXX,XX +XXX,XX @@
52
@@ -XXX,XX +XXX,XX @@
89
*/
53
*/
90
54
91
#include "qemu/osdep.h"
55
#include "qemu/osdep.h"
92
+#include "qemu/log.h"
56
-#include "qemu-common.h"
93
#include "hw/hw.h"
57
#include "qemu/datadir.h"
94
#include "hw/irq.h"
58
#include "qapi/error.h"
59
#include "hw/sysbus.h"
60
diff --git a/hw/arm/npcm7xx_boards.c b/hw/arm/npcm7xx_boards.c
61
index XXXXXXX..XXXXXXX 100644
62
--- a/hw/arm/npcm7xx_boards.c
63
+++ b/hw/arm/npcm7xx_boards.c
64
@@ -XXX,XX +XXX,XX @@
65
#include "hw/qdev-core.h"
95
#include "hw/qdev-properties.h"
66
#include "hw/qdev-properties.h"
96
@@ -XXX,XX +XXX,XX @@ static uint64_t pxa2xx_dma_read(void *opaque, hwaddr offset,
67
#include "qapi/error.h"
97
unsigned int channel;
68
-#include "qemu-common.h"
98
69
#include "qemu/datadir.h"
99
if (size != 4) {
70
#include "qemu/units.h"
100
- hw_error("%s: Bad access width\n", __func__);
71
#include "sysemu/blockdev.h"
101
+ qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad access width %u\n",
72
diff --git a/hw/arm/sbsa-ref.c b/hw/arm/sbsa-ref.c
102
+ __func__, size);
73
index XXXXXXX..XXXXXXX 100644
103
return 5;
74
--- a/hw/arm/sbsa-ref.c
104
}
75
+++ b/hw/arm/sbsa-ref.c
105
76
@@ -XXX,XX +XXX,XX @@
106
@@ -XXX,XX +XXX,XX @@ static uint64_t pxa2xx_dma_read(void *opaque, hwaddr offset,
77
*/
107
return s->chan[channel].cmd;
78
108
}
79
#include "qemu/osdep.h"
109
}
80
-#include "qemu-common.h"
110
-
81
#include "qemu/datadir.h"
111
- hw_error("%s: Bad offset 0x" TARGET_FMT_plx "\n", __func__, offset);
82
#include "qapi/error.h"
112
+ qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad offset 0x%" HWADDR_PRIX "\n",
83
#include "qemu/error-report.h"
113
+ __func__, offset);
84
diff --git a/hw/arm/stm32f405_soc.c b/hw/arm/stm32f405_soc.c
114
return 7;
85
index XXXXXXX..XXXXXXX 100644
115
}
86
--- a/hw/arm/stm32f405_soc.c
116
87
+++ b/hw/arm/stm32f405_soc.c
117
@@ -XXX,XX +XXX,XX @@ static void pxa2xx_dma_write(void *opaque, hwaddr offset,
88
@@ -XXX,XX +XXX,XX @@
118
unsigned int channel;
89
119
90
#include "qemu/osdep.h"
120
if (size != 4) {
91
#include "qapi/error.h"
121
- hw_error("%s: Bad access width\n", __func__);
92
-#include "qemu-common.h"
122
+ qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad access width %u\n",
93
#include "exec/address-spaces.h"
123
+ __func__, size);
94
#include "sysemu/sysemu.h"
124
return;
95
#include "hw/arm/stm32f405_soc.h"
125
}
96
diff --git a/hw/arm/vexpress.c b/hw/arm/vexpress.c
126
97
index XXXXXXX..XXXXXXX 100644
127
@@ -XXX,XX +XXX,XX @@ static void pxa2xx_dma_write(void *opaque, hwaddr offset,
98
--- a/hw/arm/vexpress.c
128
break;
99
+++ b/hw/arm/vexpress.c
129
}
100
@@ -XXX,XX +XXX,XX @@
130
fail:
101
131
- hw_error("%s: Bad offset " TARGET_FMT_plx "\n", __func__, offset);
102
#include "qemu/osdep.h"
132
+ qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad offset 0x%" HWADDR_PRIX "\n",
103
#include "qapi/error.h"
133
+ __func__, offset);
104
-#include "qemu-common.h"
134
}
105
#include "qemu/datadir.h"
135
}
106
#include "cpu.h"
136
107
#include "hw/sysbus.h"
108
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
109
index XXXXXXX..XXXXXXX 100644
110
--- a/hw/arm/virt.c
111
+++ b/hw/arm/virt.c
112
@@ -XXX,XX +XXX,XX @@
113
*/
114
115
#include "qemu/osdep.h"
116
-#include "qemu-common.h"
117
#include "qemu/datadir.h"
118
#include "qemu/units.h"
119
#include "qemu/option.h"
137
--
120
--
138
2.20.1
121
2.25.1
139
122
140
123
diff view generated by jsdifflib
1
Using the MSR instruction to write to CPSR.E is deprecated, but it is
1
The calculation of the length of TLB range invalidate operations
2
required to work from any mode including unprivileged code. We were
2
in tlbi_aa64_range_get_length() is incorrect in two ways:
3
incorrectly forbidding usermode code from writing it because
3
* the NUM field is 5 bits, but we read only 4 bits
4
CPSR_USER did not include the CPSR_E bit.
4
* we miscalculate the page_shift value, because of an
5
off-by-one error:
6
TG 0b00 is invalid
7
TG 0b01 is 4K granule size == 4096 == 2^12
8
TG 0b10 is 16K granule size == 16384 == 2^14
9
TG 0b11 is 64K granule size == 65536 == 2^16
10
so page_shift should be (TG - 1) * 2 + 12
5
11
6
We use CPSR_USER in only three places:
12
Thanks to the bug report submitter Cha HyunSoo for identifying
7
* as the mask of what to allow userspace MSR to write to CPSR
13
both these errors.
8
* when deciding what bits a linux-user signal-return should be
9
able to write from the sigcontext structure
10
* in target_user_copy_regs() when we set up the initial
11
registers for the linux-user process
12
14
13
In the first two cases not being able to update CPSR.E is a bug, and
15
Fixes: 84940ed82552d3c ("target/arm: Add support for FEAT_TLBIRANGE")
14
in the third case it doesn't matter because CPSR.E is always 0 there.
16
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/734
15
So we can fix both bugs by adding CPSR_E to CPSR_USER.
16
17
Because the cpsr_write() in restore_sigcontext() is now changing
18
a CPSR bit which is cached in hflags, we need to add an
19
arm_rebuild_hflags() call there; the callsite in
20
target_user_copy_regs() was already rebuilding hflags for other
21
reasons.
22
23
(The recommended way to change CPSR.E is to use the 'SETEND'
24
instruction, which we do correctly allow from usermode code.)
25
26
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
17
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
27
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
18
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
28
Message-id: 20200518142801.20503-1-peter.maydell@linaro.org
19
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
20
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
21
Message-id: 20211130173257.1274194-1-peter.maydell@linaro.org
29
---
22
---
30
target/arm/cpu.h | 2 +-
23
target/arm/helper.c | 6 +++---
31
linux-user/arm/signal.c | 1 +
24
1 file changed, 3 insertions(+), 3 deletions(-)
32
2 files changed, 2 insertions(+), 1 deletion(-)
33
25
34
diff --git a/target/arm/cpu.h b/target/arm/cpu.h
26
diff --git a/target/arm/helper.c b/target/arm/helper.c
35
index XXXXXXX..XXXXXXX 100644
27
index XXXXXXX..XXXXXXX 100644
36
--- a/target/arm/cpu.h
28
--- a/target/arm/helper.c
37
+++ b/target/arm/cpu.h
29
+++ b/target/arm/helper.c
38
@@ -XXX,XX +XXX,XX @@ void pmu_init(ARMCPU *cpu);
30
@@ -XXX,XX +XXX,XX @@ static uint64_t tlbi_aa64_range_get_length(CPUARMState *env,
39
#define CACHED_CPSR_BITS (CPSR_T | CPSR_AIF | CPSR_GE | CPSR_IT | CPSR_Q \
31
uint64_t exponent;
40
| CPSR_NZCV)
32
uint64_t length;
41
/* Bits writable in user mode. */
33
42
-#define CPSR_USER (CPSR_NZCV | CPSR_Q | CPSR_GE)
34
- num = extract64(value, 39, 4);
43
+#define CPSR_USER (CPSR_NZCV | CPSR_Q | CPSR_GE | CPSR_E)
35
+ num = extract64(value, 39, 5);
44
/* Execution state bits. MRS read as zero, MSR writes ignored. */
36
scale = extract64(value, 44, 2);
45
#define CPSR_EXEC (CPSR_T | CPSR_IT | CPSR_J | CPSR_IL)
37
page_size_granule = extract64(value, 46, 2);
46
38
47
diff --git a/linux-user/arm/signal.c b/linux-user/arm/signal.c
39
- page_shift = page_size_granule * 2 + 12;
48
index XXXXXXX..XXXXXXX 100644
40
-
49
--- a/linux-user/arm/signal.c
41
if (page_size_granule == 0) {
50
+++ b/linux-user/arm/signal.c
42
qemu_log_mask(LOG_GUEST_ERROR, "Invalid page size granule %d\n",
51
@@ -XXX,XX +XXX,XX @@ restore_sigcontext(CPUARMState *env, struct target_sigcontext *sc)
43
page_size_granule);
52
#ifdef TARGET_CONFIG_CPU_32
44
return 0;
53
__get_user(cpsr, &sc->arm_cpsr);
45
}
54
cpsr_write(env, cpsr, CPSR_USER | CPSR_EXEC, CPSRWriteByInstr);
46
55
+ arm_rebuild_hflags(env);
47
+ page_shift = (page_size_granule - 1) * 2 + 12;
56
#endif
48
+
57
49
exponent = (5 * scale) + 1;
58
err |= !valid_user_regs(env);
50
length = (num + 1) << (exponent + page_shift);
51
59
--
52
--
60
2.20.1
53
2.25.1
61
54
62
55
diff view generated by jsdifflib
1
From: Guenter Roeck <linux@roeck-us.net>
1
From: Patrick Venture <venture@google.com>
2
2
3
With this commit, the watchdog on imx25-pdk is fully operational,
3
The rx_active boolean change to true should always trigger a try_read
4
including pretimeout support.
4
call that flushes the queue.
5
5
6
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
6
Signed-off-by: Patrick Venture <venture@google.com>
7
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
7
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
8
Message-id: 20200517162135.110364-4-linux@roeck-us.net
8
Message-id: 20211203221002.1719306-1-venture@google.com
9
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
9
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
10
---
10
---
11
include/hw/arm/fsl-imx25.h | 5 +++++
11
hw/net/npcm7xx_emc.c | 18 ++++++++----------
12
hw/arm/fsl-imx25.c | 10 ++++++++++
12
1 file changed, 8 insertions(+), 10 deletions(-)
13
hw/arm/Kconfig | 1 +
14
3 files changed, 16 insertions(+)
15
13
16
diff --git a/include/hw/arm/fsl-imx25.h b/include/hw/arm/fsl-imx25.h
14
diff --git a/hw/net/npcm7xx_emc.c b/hw/net/npcm7xx_emc.c
17
index XXXXXXX..XXXXXXX 100644
15
index XXXXXXX..XXXXXXX 100644
18
--- a/include/hw/arm/fsl-imx25.h
16
--- a/hw/net/npcm7xx_emc.c
19
+++ b/include/hw/arm/fsl-imx25.h
17
+++ b/hw/net/npcm7xx_emc.c
20
@@ -XXX,XX +XXX,XX @@
18
@@ -XXX,XX +XXX,XX @@ static void emc_halt_rx(NPCM7xxEMCState *emc, uint32_t mista_flag)
21
#include "hw/gpio/imx_gpio.h"
19
emc_set_mista(emc, mista_flag);
22
#include "hw/sd/sdhci.h"
23
#include "hw/usb/chipidea.h"
24
+#include "hw/watchdog/wdt_imx2.h"
25
#include "exec/memory.h"
26
#include "target/arm/cpu.h"
27
28
@@ -XXX,XX +XXX,XX @@ typedef struct FslIMX25State {
29
IMXGPIOState gpio[FSL_IMX25_NUM_GPIOS];
30
SDHCIState esdhc[FSL_IMX25_NUM_ESDHCS];
31
ChipideaState usb[FSL_IMX25_NUM_USBS];
32
+ IMX2WdtState wdt;
33
MemoryRegion rom[2];
34
MemoryRegion iram;
35
MemoryRegion iram_alias;
36
@@ -XXX,XX +XXX,XX @@ typedef struct FslIMX25State {
37
#define FSL_IMX25_GPIO1_SIZE 0x4000
38
#define FSL_IMX25_GPIO2_ADDR 0x53FD0000
39
#define FSL_IMX25_GPIO2_SIZE 0x4000
40
+#define FSL_IMX25_WDT_ADDR 0x53FDC000
41
+#define FSL_IMX25_WDT_SIZE 0x4000
42
#define FSL_IMX25_USB1_ADDR 0x53FF4000
43
#define FSL_IMX25_USB1_SIZE 0x0200
44
#define FSL_IMX25_USB2_ADDR 0x53FF4400
45
@@ -XXX,XX +XXX,XX @@ typedef struct FslIMX25State {
46
#define FSL_IMX25_ESDHC2_IRQ 8
47
#define FSL_IMX25_USB1_IRQ 37
48
#define FSL_IMX25_USB2_IRQ 35
49
+#define FSL_IMX25_WDT_IRQ 55
50
51
#endif /* FSL_IMX25_H */
52
diff --git a/hw/arm/fsl-imx25.c b/hw/arm/fsl-imx25.c
53
index XXXXXXX..XXXXXXX 100644
54
--- a/hw/arm/fsl-imx25.c
55
+++ b/hw/arm/fsl-imx25.c
56
@@ -XXX,XX +XXX,XX @@ static void fsl_imx25_init(Object *obj)
57
TYPE_CHIPIDEA);
58
}
59
60
+ sysbus_init_child_obj(obj, "wdt", &s->wdt, sizeof(s->wdt), TYPE_IMX2_WDT);
61
}
20
}
62
21
63
static void fsl_imx25_realize(DeviceState *dev, Error **errp)
22
+static void emc_enable_rx_and_flush(NPCM7xxEMCState *emc)
64
@@ -XXX,XX +XXX,XX @@ static void fsl_imx25_realize(DeviceState *dev, Error **errp)
23
+{
65
usb_table[i].irq));
24
+ emc->rx_active = true;
66
}
25
+ qemu_flush_queued_packets(qemu_get_queue(emc->nic));
67
26
+}
68
+ /* Watchdog */
69
+ object_property_set_bool(OBJECT(&s->wdt), true, "pretimeout-support",
70
+ &error_abort);
71
+ object_property_set_bool(OBJECT(&s->wdt), true, "realized", &error_abort);
72
+ sysbus_mmio_map(SYS_BUS_DEVICE(&s->wdt), 0, FSL_IMX25_WDT_ADDR);
73
+ sysbus_connect_irq(SYS_BUS_DEVICE(&s->wdt), 0,
74
+ qdev_get_gpio_in(DEVICE(&s->avic),
75
+ FSL_IMX25_WDT_IRQ));
76
+
27
+
77
/* initialize 2 x 16 KB ROM */
28
static void emc_set_next_tx_descriptor(NPCM7xxEMCState *emc,
78
memory_region_init_rom(&s->rom[0], OBJECT(dev), "imx25.rom0",
29
const NPCM7xxEMCTxDesc *tx_desc,
79
FSL_IMX25_ROM0_SIZE, &err);
30
uint32_t desc_addr)
80
diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig
31
@@ -XXX,XX +XXX,XX @@ static ssize_t emc_receive(NetClientState *nc, const uint8_t *buf, size_t len1)
81
index XXXXXXX..XXXXXXX 100644
32
return len;
82
--- a/hw/arm/Kconfig
33
}
83
+++ b/hw/arm/Kconfig
34
84
@@ -XXX,XX +XXX,XX @@ config FSL_IMX25
35
-static void emc_try_receive_next_packet(NPCM7xxEMCState *emc)
85
select IMX
36
-{
86
select IMX_FEC
37
- if (emc_can_receive(qemu_get_queue(emc->nic))) {
87
select IMX_I2C
38
- qemu_flush_queued_packets(qemu_get_queue(emc->nic));
88
+ select WDT_IMX2
39
- }
89
select DS1338
40
-}
90
41
-
91
config FSL_IMX31
42
static uint64_t npcm7xx_emc_read(void *opaque, hwaddr offset, unsigned size)
43
{
44
NPCM7xxEMCState *emc = opaque;
45
@@ -XXX,XX +XXX,XX @@ static void npcm7xx_emc_write(void *opaque, hwaddr offset,
46
emc->regs[REG_MGSTA] |= REG_MGSTA_RXHA;
47
}
48
if (value & REG_MCMDR_RXON) {
49
- emc->rx_active = true;
50
+ emc_enable_rx_and_flush(emc);
51
} else {
52
emc_halt_rx(emc, 0);
53
}
54
@@ -XXX,XX +XXX,XX @@ static void npcm7xx_emc_write(void *opaque, hwaddr offset,
55
break;
56
case REG_RSDR:
57
if (emc->regs[REG_MCMDR] & REG_MCMDR_RXON) {
58
- emc->rx_active = true;
59
- emc_try_receive_next_packet(emc);
60
+ emc_enable_rx_and_flush(emc);
61
}
62
break;
63
case REG_MIIDA:
92
--
64
--
93
2.20.1
65
2.25.1
94
66
95
67
diff view generated by jsdifflib
1
From: Guenter Roeck <linux@roeck-us.net>
1
From: Jean-Philippe Brucker <jean-philippe@linaro.org>
2
2
3
In preparation for a full implementation, move i.MX watchdog driver
3
When a virtio-iommu is instantiated, describe it using the ACPI VIOT
4
from hw/misc to hw/watchdog. While at it, add the watchdog files
4
table.
5
to MAINTAINERS.
6
5
7
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
6
Acked-by: Igor Mammedov <imammedo@redhat.com>
8
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
7
Reviewed-by: Eric Auger <eric.auger@redhat.com>
9
Message-id: 20200517162135.110364-2-linux@roeck-us.net
8
Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
9
Message-id: 20211210170415.583179-2-jean-philippe@linaro.org
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
11
---
11
---
12
include/hw/arm/fsl-imx6.h | 2 +-
12
hw/arm/virt-acpi-build.c | 7 +++++++
13
include/hw/arm/fsl-imx6ul.h | 2 +-
13
hw/arm/Kconfig | 1 +
14
include/hw/arm/fsl-imx7.h | 2 +-
14
2 files changed, 8 insertions(+)
15
include/hw/{misc/imx2_wdt.h => watchdog/wdt_imx2.h} | 0
16
hw/{misc/imx2_wdt.c => watchdog/wdt_imx2.c} | 2 +-
17
MAINTAINERS | 2 ++
18
hw/arm/Kconfig | 3 +++
19
hw/misc/Makefile.objs | 1 -
20
hw/watchdog/Kconfig | 3 +++
21
hw/watchdog/Makefile.objs | 1 +
22
10 files changed, 13 insertions(+), 5 deletions(-)
23
rename include/hw/{misc/imx2_wdt.h => watchdog/wdt_imx2.h} (100%)
24
rename hw/{misc/imx2_wdt.c => watchdog/wdt_imx2.c} (98%)
25
15
26
diff --git a/include/hw/arm/fsl-imx6.h b/include/hw/arm/fsl-imx6.h
16
diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c
27
index XXXXXXX..XXXXXXX 100644
17
index XXXXXXX..XXXXXXX 100644
28
--- a/include/hw/arm/fsl-imx6.h
18
--- a/hw/arm/virt-acpi-build.c
29
+++ b/include/hw/arm/fsl-imx6.h
19
+++ b/hw/arm/virt-acpi-build.c
30
@@ -XXX,XX +XXX,XX @@
20
@@ -XXX,XX +XXX,XX @@
31
#include "hw/cpu/a9mpcore.h"
21
#include "kvm_arm.h"
32
#include "hw/misc/imx6_ccm.h"
22
#include "migration/vmstate.h"
33
#include "hw/misc/imx6_src.h"
23
#include "hw/acpi/ghes.h"
34
-#include "hw/misc/imx2_wdt.h"
24
+#include "hw/acpi/viot.h"
35
+#include "hw/watchdog/wdt_imx2.h"
25
36
#include "hw/char/imx_serial.h"
26
#define ARM_SPI_BASE 32
37
#include "hw/timer/imx_gpt.h"
27
38
#include "hw/timer/imx_epit.h"
28
@@ -XXX,XX +XXX,XX @@ void virt_acpi_build(VirtMachineState *vms, AcpiBuildTables *tables)
39
diff --git a/include/hw/arm/fsl-imx6ul.h b/include/hw/arm/fsl-imx6ul.h
29
}
40
index XXXXXXX..XXXXXXX 100644
30
#endif
41
--- a/include/hw/arm/fsl-imx6ul.h
31
42
+++ b/include/hw/arm/fsl-imx6ul.h
32
+ if (vms->iommu == VIRT_IOMMU_VIRTIO) {
43
@@ -XXX,XX +XXX,XX @@
33
+ acpi_add_table(table_offsets, tables_blob);
44
#include "hw/misc/imx7_snvs.h"
34
+ build_viot(ms, tables_blob, tables->linker, vms->virtio_iommu_bdf,
45
#include "hw/misc/imx7_gpr.h"
35
+ vms->oem_id, vms->oem_table_id);
46
#include "hw/intc/imx_gpcv2.h"
36
+ }
47
-#include "hw/misc/imx2_wdt.h"
37
+
48
+#include "hw/watchdog/wdt_imx2.h"
38
/* XSDT is pointed to by RSDP */
49
#include "hw/gpio/imx_gpio.h"
39
xsdt = tables_blob->len;
50
#include "hw/char/imx_serial.h"
40
build_xsdt(tables_blob, tables->linker, table_offsets, vms->oem_id,
51
#include "hw/timer/imx_gpt.h"
52
diff --git a/include/hw/arm/fsl-imx7.h b/include/hw/arm/fsl-imx7.h
53
index XXXXXXX..XXXXXXX 100644
54
--- a/include/hw/arm/fsl-imx7.h
55
+++ b/include/hw/arm/fsl-imx7.h
56
@@ -XXX,XX +XXX,XX @@
57
#include "hw/misc/imx7_snvs.h"
58
#include "hw/misc/imx7_gpr.h"
59
#include "hw/misc/imx6_src.h"
60
-#include "hw/misc/imx2_wdt.h"
61
+#include "hw/watchdog/wdt_imx2.h"
62
#include "hw/gpio/imx_gpio.h"
63
#include "hw/char/imx_serial.h"
64
#include "hw/timer/imx_gpt.h"
65
diff --git a/include/hw/misc/imx2_wdt.h b/include/hw/watchdog/wdt_imx2.h
66
similarity index 100%
67
rename from include/hw/misc/imx2_wdt.h
68
rename to include/hw/watchdog/wdt_imx2.h
69
diff --git a/hw/misc/imx2_wdt.c b/hw/watchdog/wdt_imx2.c
70
similarity index 98%
71
rename from hw/misc/imx2_wdt.c
72
rename to hw/watchdog/wdt_imx2.c
73
index XXXXXXX..XXXXXXX 100644
74
--- a/hw/misc/imx2_wdt.c
75
+++ b/hw/watchdog/wdt_imx2.c
76
@@ -XXX,XX +XXX,XX @@
77
#include "qemu/module.h"
78
#include "sysemu/watchdog.h"
79
80
-#include "hw/misc/imx2_wdt.h"
81
+#include "hw/watchdog/wdt_imx2.h"
82
83
#define IMX2_WDT_WCR_WDA BIT(5) /* -> External Reset WDOG_B */
84
#define IMX2_WDT_WCR_SRS BIT(4) /* -> Software Reset Signal */
85
diff --git a/MAINTAINERS b/MAINTAINERS
86
index XXXXXXX..XXXXXXX 100644
87
--- a/MAINTAINERS
88
+++ b/MAINTAINERS
89
@@ -XXX,XX +XXX,XX @@ S: Odd Fixes
90
F: hw/arm/fsl-imx25.c
91
F: hw/arm/imx25_pdk.c
92
F: hw/misc/imx25_ccm.c
93
+F: hw/watchdog/wdt_imx2.c
94
F: include/hw/arm/fsl-imx25.h
95
F: include/hw/misc/imx25_ccm.h
96
+F: include/hw/watchdog/wdt_imx2.h
97
98
i.MX31 (kzm)
99
M: Peter Chubb <peter.chubb@nicta.com.au>
100
diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig
41
diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig
101
index XXXXXXX..XXXXXXX 100644
42
index XXXXXXX..XXXXXXX 100644
102
--- a/hw/arm/Kconfig
43
--- a/hw/arm/Kconfig
103
+++ b/hw/arm/Kconfig
44
+++ b/hw/arm/Kconfig
104
@@ -XXX,XX +XXX,XX @@ config FSL_IMX6
45
@@ -XXX,XX +XXX,XX @@ config ARM_VIRT
105
select IMX_FEC
46
select DIMM
106
select IMX_I2C
47
select ACPI_HW_REDUCED
107
select IMX_USBPHY
48
select ACPI_APEI
108
+ select WDT_IMX2
49
+ select ACPI_VIOT
109
select SDHCI
50
110
51
config CHEETAH
111
config ASPEED_SOC
112
@@ -XXX,XX +XXX,XX @@ config FSL_IMX7
113
select IMX
114
select IMX_FEC
115
select IMX_I2C
116
+ select WDT_IMX2
117
select PCI_EXPRESS_DESIGNWARE
118
select SDHCI
119
select UNIMP
120
@@ -XXX,XX +XXX,XX @@ config FSL_IMX6UL
121
select IMX
122
select IMX_FEC
123
select IMX_I2C
124
+ select WDT_IMX2
125
select SDHCI
126
select UNIMP
127
128
diff --git a/hw/misc/Makefile.objs b/hw/misc/Makefile.objs
129
index XXXXXXX..XXXXXXX 100644
130
--- a/hw/misc/Makefile.objs
131
+++ b/hw/misc/Makefile.objs
132
@@ -XXX,XX +XXX,XX @@ common-obj-$(CONFIG_IMX) += imx6_ccm.o
133
common-obj-$(CONFIG_IMX) += imx6ul_ccm.o
134
obj-$(CONFIG_IMX) += imx6_src.o
135
common-obj-$(CONFIG_IMX) += imx7_ccm.o
136
-common-obj-$(CONFIG_IMX) += imx2_wdt.o
137
common-obj-$(CONFIG_IMX) += imx7_snvs.o
138
common-obj-$(CONFIG_IMX) += imx7_gpr.o
139
common-obj-$(CONFIG_IMX) += imx_rngc.o
140
diff --git a/hw/watchdog/Kconfig b/hw/watchdog/Kconfig
141
index XXXXXXX..XXXXXXX 100644
142
--- a/hw/watchdog/Kconfig
143
+++ b/hw/watchdog/Kconfig
144
@@ -XXX,XX +XXX,XX @@ config WDT_IB700
145
146
config WDT_DIAG288
147
bool
52
bool
148
+
149
+config WDT_IMX2
150
+ bool
151
diff --git a/hw/watchdog/Makefile.objs b/hw/watchdog/Makefile.objs
152
index XXXXXXX..XXXXXXX 100644
153
--- a/hw/watchdog/Makefile.objs
154
+++ b/hw/watchdog/Makefile.objs
155
@@ -XXX,XX +XXX,XX @@ common-obj-$(CONFIG_WDT_IB6300ESB) += wdt_i6300esb.o
156
common-obj-$(CONFIG_WDT_IB700) += wdt_ib700.o
157
common-obj-$(CONFIG_WDT_DIAG288) += wdt_diag288.o
158
common-obj-$(CONFIG_ASPEED_SOC) += wdt_aspeed.o
159
+common-obj-$(CONFIG_WDT_IMX2) += wdt_imx2.o
160
--
53
--
161
2.20.1
54
2.25.1
162
55
163
56
diff view generated by jsdifflib
1
From: Geert Uytterhoeven <geert+renesas@glider.be>
1
From: Jean-Philippe Brucker <jean-philippe@linaro.org>
2
2
3
Add a definition for the number of GPIO lines controlled by a PL061
3
virtio-iommu is now supported with ACPI VIOT as well as device tree.
4
instance, and use it instead of the hardcoded magic value 8.
4
Remove the restriction that prevents from instantiating a virtio-iommu
5
device under ACPI.
5
6
6
Suggested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
7
Acked-by: Igor Mammedov <imammedo@redhat.com>
7
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
8
Reviewed-by: Eric Auger <eric.auger@redhat.com>
8
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
9
Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
9
Message-id: 20200519085143.1376-1-geert+renesas@glider.be
10
Message-id: 20211210170415.583179-3-jean-philippe@linaro.org
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
11
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
11
---
12
---
12
hw/gpio/pl061.c | 12 +++++++-----
13
hw/arm/virt.c | 10 ++--------
13
1 file changed, 7 insertions(+), 5 deletions(-)
14
hw/virtio/virtio-iommu-pci.c | 12 ++----------
15
2 files changed, 4 insertions(+), 18 deletions(-)
14
16
15
diff --git a/hw/gpio/pl061.c b/hw/gpio/pl061.c
17
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
16
index XXXXXXX..XXXXXXX 100644
18
index XXXXXXX..XXXXXXX 100644
17
--- a/hw/gpio/pl061.c
19
--- a/hw/arm/virt.c
18
+++ b/hw/gpio/pl061.c
20
+++ b/hw/arm/virt.c
19
@@ -XXX,XX +XXX,XX @@ static const uint8_t pl061_id_luminary[12] =
21
@@ -XXX,XX +XXX,XX @@ static HotplugHandler *virt_machine_get_hotplug_handler(MachineState *machine,
20
#define TYPE_PL061 "pl061"
22
MachineClass *mc = MACHINE_GET_CLASS(machine);
21
#define PL061(obj) OBJECT_CHECK(PL061State, (obj), TYPE_PL061)
23
22
24
if (device_is_dynamic_sysbus(mc, dev) ||
23
+#define N_GPIOS 8
25
- (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM))) {
24
+
26
+ object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM) ||
25
typedef struct PL061State {
27
+ object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_IOMMU_PCI)) {
26
SysBusDevice parent_obj;
28
return HOTPLUG_HANDLER(machine);
27
29
}
28
@@ -XXX,XX +XXX,XX @@ typedef struct PL061State {
30
- if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_IOMMU_PCI)) {
29
uint32_t cr;
31
- VirtMachineState *vms = VIRT_MACHINE(machine);
30
uint32_t amsel;
32
-
31
qemu_irq irq;
33
- if (!vms->bootinfo.firmware_loaded || !virt_is_acpi_enabled(vms)) {
32
- qemu_irq out[8];
34
- return HOTPLUG_HANDLER(machine);
33
+ qemu_irq out[N_GPIOS];
35
- }
34
const unsigned char *id;
36
- }
35
uint32_t rsvd_start; /* reserved area: [rsvd_start, 0xfcc] */
37
return NULL;
36
} PL061State;
37
@@ -XXX,XX +XXX,XX @@ static void pl061_update(PL061State *s)
38
changed = s->old_out_data ^ out;
39
if (changed) {
40
s->old_out_data = out;
41
- for (i = 0; i < 8; i++) {
42
+ for (i = 0; i < N_GPIOS; i++) {
43
mask = 1 << i;
44
if (changed & mask) {
45
DPRINTF("Set output %d = %d\n", i, (out & mask) != 0);
46
@@ -XXX,XX +XXX,XX @@ static void pl061_update(PL061State *s)
47
changed = (s->old_in_data ^ s->data) & ~s->dir;
48
if (changed) {
49
s->old_in_data = s->data;
50
- for (i = 0; i < 8; i++) {
51
+ for (i = 0; i < N_GPIOS; i++) {
52
mask = 1 << i;
53
if (changed & mask) {
54
DPRINTF("Changed input %d = %d\n", i, (s->data & mask) != 0);
55
@@ -XXX,XX +XXX,XX @@ static void pl061_init(Object *obj)
56
memory_region_init_io(&s->iomem, obj, &pl061_ops, s, "pl061", 0x1000);
57
sysbus_init_mmio(sbd, &s->iomem);
58
sysbus_init_irq(sbd, &s->irq);
59
- qdev_init_gpio_in(dev, pl061_set_irq, 8);
60
- qdev_init_gpio_out(dev, s->out, 8);
61
+ qdev_init_gpio_in(dev, pl061_set_irq, N_GPIOS);
62
+ qdev_init_gpio_out(dev, s->out, N_GPIOS);
63
}
38
}
64
39
65
static void pl061_class_init(ObjectClass *klass, void *data)
40
diff --git a/hw/virtio/virtio-iommu-pci.c b/hw/virtio/virtio-iommu-pci.c
41
index XXXXXXX..XXXXXXX 100644
42
--- a/hw/virtio/virtio-iommu-pci.c
43
+++ b/hw/virtio/virtio-iommu-pci.c
44
@@ -XXX,XX +XXX,XX @@ static void virtio_iommu_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
45
VirtIOIOMMU *s = VIRTIO_IOMMU(vdev);
46
47
if (!qdev_get_machine_hotplug_handler(DEVICE(vpci_dev))) {
48
- MachineClass *mc = MACHINE_GET_CLASS(qdev_get_machine());
49
-
50
- error_setg(errp,
51
- "%s machine fails to create iommu-map device tree bindings",
52
- mc->name);
53
- error_append_hint(errp,
54
- "Check your machine implements a hotplug handler "
55
- "for the virtio-iommu-pci device\n");
56
- error_append_hint(errp, "Check the guest is booted without FW or with "
57
- "-no-acpi\n");
58
+ error_setg(errp, "Check your machine implements a hotplug handler "
59
+ "for the virtio-iommu-pci device");
60
return;
61
}
62
for (int i = 0; i < s->nb_reserved_regions; i++) {
66
--
63
--
67
2.20.1
64
2.25.1
68
65
69
66
diff view generated by jsdifflib
1
In linux-user/arm/cpu-loop.c we incorrectly treat EXCP_BKPT similarly
1
From: Jean-Philippe Brucker <jean-philippe@linaro.org>
2
to EXCP_SWI, which means that if the guest executes a BKPT insn then
3
QEMU will perform a syscall for it (which syscall depends on what
4
value happens to be in r7...). The correct behaviour is that the
5
guest process should take a SIGTRAP.
6
2
7
This code has been like this (more or less) since commit
3
We do not support instantiating multiple IOMMUs. Before adding a
8
06c949e62a098f in 2006 which added BKPT in the first place. This is
4
virtio-iommu, check that no other IOMMU is present. This will detect
9
probably because at the time the same code path was used to handle
5
both "iommu=smmuv3" machine parameter and another virtio-iommu instance.
10
both Linux syscalls and semihosting calls, and (on M profile) BKPT
11
with a suitable magic number is used for semihosting calls. But
12
these days we've moved handling of semihosting out to an entirely
13
different codepath, so we can fix this bug by simply removing this
14
handling of EXCP_BKPT and instead making it deliver a SIGTRAP like
15
EXCP_DEBUG (as we do already on aarch64).
16
6
17
Reported-by: <omerg681@gmail.com>
7
Fixes: 70e89132c9 ("hw/arm/virt: Add the virtio-iommu device tree mappings")
18
Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
8
Reviewed-by: Eric Auger <eric.auger@redhat.com>
19
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
9
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
20
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
10
Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
21
Message-id: 20200420212206.12776-2-peter.maydell@linaro.org
11
Message-id: 20211210170415.583179-4-jean-philippe@linaro.org
22
Fixes: https://bugs.launchpad.net/qemu/+bug/1873898
23
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
12
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
24
---
13
---
25
linux-user/arm/cpu_loop.c | 30 ++++++++----------------------
14
hw/arm/virt.c | 5 +++++
26
1 file changed, 8 insertions(+), 22 deletions(-)
15
1 file changed, 5 insertions(+)
27
16
28
diff --git a/linux-user/arm/cpu_loop.c b/linux-user/arm/cpu_loop.c
17
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
29
index XXXXXXX..XXXXXXX 100644
18
index XXXXXXX..XXXXXXX 100644
30
--- a/linux-user/arm/cpu_loop.c
19
--- a/hw/arm/virt.c
31
+++ b/linux-user/arm/cpu_loop.c
20
+++ b/hw/arm/virt.c
32
@@ -XXX,XX +XXX,XX @@ void cpu_loop(CPUARMState *env)
21
@@ -XXX,XX +XXX,XX @@ static void virt_machine_device_pre_plug_cb(HotplugHandler *hotplug_dev,
33
}
22
hwaddr db_start = 0, db_end = 0;
34
break;
23
char *resv_prop_str;
35
case EXCP_SWI:
24
36
- case EXCP_BKPT:
25
+ if (vms->iommu != VIRT_IOMMU_NONE) {
37
{
26
+ error_setg(errp, "virt machine does not support multiple IOMMUs");
38
env->eabi = 1;
27
+ return;
39
/* system call */
28
+ }
40
- if (trapnr == EXCP_BKPT) {
29
+
41
- if (env->thumb) {
30
switch (vms->msi_controller) {
42
- /* FIXME - what to do if get_user() fails? */
31
case VIRT_MSI_CTRL_NONE:
43
- get_user_code_u16(insn, env->regs[15], env);
32
return;
44
- n = insn & 0xff;
45
- env->regs[15] += 2;
46
- } else {
47
- /* FIXME - what to do if get_user() fails? */
48
- get_user_code_u32(insn, env->regs[15], env);
49
- n = (insn & 0xf) | ((insn >> 4) & 0xff0);
50
- env->regs[15] += 4;
51
- }
52
+ if (env->thumb) {
53
+ /* FIXME - what to do if get_user() fails? */
54
+ get_user_code_u16(insn, env->regs[15] - 2, env);
55
+ n = insn & 0xff;
56
} else {
57
- if (env->thumb) {
58
- /* FIXME - what to do if get_user() fails? */
59
- get_user_code_u16(insn, env->regs[15] - 2, env);
60
- n = insn & 0xff;
61
- } else {
62
- /* FIXME - what to do if get_user() fails? */
63
- get_user_code_u32(insn, env->regs[15] - 4, env);
64
- n = insn & 0xffffff;
65
- }
66
+ /* FIXME - what to do if get_user() fails? */
67
+ get_user_code_u32(insn, env->regs[15] - 4, env);
68
+ n = insn & 0xffffff;
69
}
70
71
if (n == ARM_NR_cacheflush) {
72
@@ -XXX,XX +XXX,XX @@ void cpu_loop(CPUARMState *env)
73
}
74
break;
75
case EXCP_DEBUG:
76
+ case EXCP_BKPT:
77
excp_debug:
78
info.si_signo = TARGET_SIGTRAP;
79
info.si_errno = 0;
80
--
33
--
81
2.20.1
34
2.25.1
82
35
83
36
diff view generated by jsdifflib
1
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
1
From: Jean-Philippe Brucker <jean-philippe@linaro.org>
2
2
3
hw_error() calls exit(). This a bit overkill when we can log
3
To propagate errors to the caller of the pre_plug callback, use the
4
the accesses as unimplemented or guest error.
4
object_poperty_set*() functions directly instead of the qdev_prop_set*()
5
helpers.
5
6
6
When fuzzing the devices, we don't want the whole process to
7
Suggested-by: Igor Mammedov <imammedo@redhat.com>
7
exit. Replace some hw_error() calls by qemu_log_mask().
8
Reviewed-by: Eric Auger <eric.auger@redhat.com>
8
9
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
9
Per the datasheet "Exynos 4412 RISC Microprocessor Rev 1.00"
10
Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
10
Chapter 25 "Multi Core Timer (MCT)" figure 1 and table 4,
11
Message-id: 20211210170415.583179-5-jean-philippe@linaro.org
11
the default value on the APB bus is 0.
12
13
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
14
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
15
Message-id: 20200518140309.5220-5-f4bug@amsat.org
16
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
12
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
17
---
13
---
18
hw/timer/exynos4210_mct.c | 12 +++++-------
14
hw/arm/virt.c | 5 +++--
19
1 file changed, 5 insertions(+), 7 deletions(-)
15
1 file changed, 3 insertions(+), 2 deletions(-)
20
16
21
diff --git a/hw/timer/exynos4210_mct.c b/hw/timer/exynos4210_mct.c
17
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
22
index XXXXXXX..XXXXXXX 100644
18
index XXXXXXX..XXXXXXX 100644
23
--- a/hw/timer/exynos4210_mct.c
19
--- a/hw/arm/virt.c
24
+++ b/hw/timer/exynos4210_mct.c
20
+++ b/hw/arm/virt.c
25
@@ -XXX,XX +XXX,XX @@
21
@@ -XXX,XX +XXX,XX @@ static void virt_machine_device_pre_plug_cb(HotplugHandler *hotplug_dev,
26
22
db_start, db_end,
27
#include "qemu/osdep.h"
23
VIRTIO_IOMMU_RESV_MEM_T_MSI);
28
#include "qemu/log.h"
24
29
-#include "hw/hw.h"
25
- qdev_prop_set_uint32(dev, "len-reserved-regions", 1);
30
#include "hw/sysbus.h"
26
- qdev_prop_set_string(dev, "reserved-regions[0]", resv_prop_str);
31
#include "migration/vmstate.h"
27
+ object_property_set_uint(OBJECT(dev), "len-reserved-regions", 1, errp);
32
#include "qemu/timer.h"
28
+ object_property_set_str(OBJECT(dev), "reserved-regions[0]",
33
@@ -XXX,XX +XXX,XX @@
29
+ resv_prop_str, errp);
34
#include "hw/ptimer.h"
30
g_free(resv_prop_str);
35
36
#include "hw/arm/exynos4210.h"
37
-#include "hw/hw.h"
38
#include "hw/irq.h"
39
40
//#define DEBUG_MCT
41
@@ -XXX,XX +XXX,XX @@ static uint64_t exynos4210_mct_read(void *opaque, hwaddr offset,
42
int index;
43
int shift;
44
uint64_t count;
45
- uint32_t value;
46
+ uint32_t value = 0;
47
int lt_i;
48
49
switch (offset) {
50
@@ -XXX,XX +XXX,XX @@ static uint64_t exynos4210_mct_read(void *opaque, hwaddr offset,
51
break;
52
53
default:
54
- hw_error("exynos4210.mct: bad read offset "
55
- TARGET_FMT_plx "\n", offset);
56
+ qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad offset 0x%" HWADDR_PRIX "\n",
57
+ __func__, offset);
58
break;
59
}
60
return value;
61
@@ -XXX,XX +XXX,XX @@ static void exynos4210_mct_write(void *opaque, hwaddr offset,
62
break;
63
64
default:
65
- hw_error("exynos4210.mct: bad write offset "
66
- TARGET_FMT_plx "\n", offset);
67
+ qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad offset 0x%" HWADDR_PRIX "\n",
68
+ __func__, offset);
69
break;
70
}
31
}
71
}
32
}
72
--
33
--
73
2.20.1
34
2.25.1
74
35
75
36
diff view generated by jsdifflib
1
From: Thomas Huth <thuth@redhat.com>
1
From: Jean-Philippe Brucker <jean-philippe@linaro.org>
2
2
3
The canon-a1100 machine can be used with the Barebox firmware. The
3
Create empty data files and allow updates for the upcoming VIOT tests.
4
QEMU Advent Calendar 2018 features a pre-compiled image which we
5
can use for testing.
6
4
7
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
5
Acked-by: Igor Mammedov <imammedo@redhat.com>
8
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
6
Reviewed-by: Eric Auger <eric.auger@redhat.com>
9
Reviewed-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
7
Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
10
Tested-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
8
Message-id: 20211210170415.583179-6-jean-philippe@linaro.org
11
Signed-off-by: Thomas Huth <thuth@redhat.com>
12
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
13
Message-id: 20200514190422.23645-1-f4bug@amsat.org
14
Message-Id: <20200129090420.13954-1-thuth@redhat.com>
15
[PMD: Rebased MAINTAINERS]
16
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
17
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
9
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
18
---
10
---
19
MAINTAINERS | 1 +
11
tests/qtest/bios-tables-test-allowed-diff.h | 3 +++
20
tests/acceptance/machine_arm_canona1100.py | 35 ++++++++++++++++++++++
12
tests/data/acpi/q35/DSDT.viot | 0
21
2 files changed, 36 insertions(+)
13
tests/data/acpi/q35/VIOT.viot | 0
22
create mode 100644 tests/acceptance/machine_arm_canona1100.py
14
tests/data/acpi/virt/VIOT | 0
15
4 files changed, 3 insertions(+)
16
create mode 100644 tests/data/acpi/q35/DSDT.viot
17
create mode 100644 tests/data/acpi/q35/VIOT.viot
18
create mode 100644 tests/data/acpi/virt/VIOT
23
19
24
diff --git a/MAINTAINERS b/MAINTAINERS
20
diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios-tables-test-allowed-diff.h
25
index XXXXXXX..XXXXXXX 100644
21
index XXXXXXX..XXXXXXX 100644
26
--- a/MAINTAINERS
22
--- a/tests/qtest/bios-tables-test-allowed-diff.h
27
+++ b/MAINTAINERS
23
+++ b/tests/qtest/bios-tables-test-allowed-diff.h
28
@@ -XXX,XX +XXX,XX @@ S: Odd Fixes
24
@@ -1 +1,4 @@
29
F: include/hw/arm/digic.h
25
/* List of comma-separated changed AML files to ignore */
30
F: hw/*/digic*
26
+"tests/data/acpi/virt/VIOT",
31
F: include/hw/*/digic*
27
+"tests/data/acpi/q35/DSDT.viot",
32
+F: tests/acceptance/machine_arm_canona1100.py
28
+"tests/data/acpi/q35/VIOT.viot",
33
29
diff --git a/tests/data/acpi/q35/DSDT.viot b/tests/data/acpi/q35/DSDT.viot
34
Goldfish RTC
35
M: Anup Patel <anup.patel@wdc.com>
36
diff --git a/tests/acceptance/machine_arm_canona1100.py b/tests/acceptance/machine_arm_canona1100.py
37
new file mode 100644
30
new file mode 100644
38
index XXXXXXX..XXXXXXX
31
index XXXXXXX..XXXXXXX
39
--- /dev/null
32
diff --git a/tests/data/acpi/q35/VIOT.viot b/tests/data/acpi/q35/VIOT.viot
40
+++ b/tests/acceptance/machine_arm_canona1100.py
33
new file mode 100644
41
@@ -XXX,XX +XXX,XX @@
34
index XXXXXXX..XXXXXXX
42
+# Functional test that boots the canon-a1100 machine with firmware
35
diff --git a/tests/data/acpi/virt/VIOT b/tests/data/acpi/virt/VIOT
43
+#
36
new file mode 100644
44
+# Copyright (c) 2020 Red Hat, Inc.
37
index XXXXXXX..XXXXXXX
45
+#
46
+# Author:
47
+# Thomas Huth <thuth@redhat.com>
48
+#
49
+# This work is licensed under the terms of the GNU GPL, version 2 or
50
+# later. See the COPYING file in the top-level directory.
51
+
52
+from avocado_qemu import Test
53
+from avocado_qemu import wait_for_console_pattern
54
+from avocado.utils import archive
55
+
56
+class CanonA1100Machine(Test):
57
+ """Boots the barebox firmware and checks that the console is operational"""
58
+
59
+ timeout = 90
60
+
61
+ def test_arm_canona1100(self):
62
+ """
63
+ :avocado: tags=arch:arm
64
+ :avocado: tags=machine:canon-a1100
65
+ :avocado: tags=device:pflash_cfi02
66
+ """
67
+ tar_url = ('https://www.qemu-advent-calendar.org'
68
+ '/2018/download/day18.tar.xz')
69
+ tar_hash = '068b5fc4242b29381acee94713509f8a876e9db6'
70
+ file_path = self.fetch_asset(tar_url, asset_hash=tar_hash)
71
+ archive.extract(file_path, self.workdir)
72
+ self.vm.set_console()
73
+ self.vm.add_args('-bios',
74
+ self.workdir + '/day18/barebox.canon-a1100.bin')
75
+ self.vm.launch()
76
+ wait_for_console_pattern(self, 'running /env/bin/init')
77
--
38
--
78
2.20.1
39
2.25.1
79
40
80
41
diff view generated by jsdifflib
1
From: Guenter Roeck <linux@roeck-us.net>
1
From: Jean-Philippe Brucker <jean-philippe@linaro.org>
2
2
3
Implement full support for the watchdog in i.MX systems.
3
Add two test cases for VIOT, one on the q35 machine and the other on
4
Pretimeout support is optional because the watchdog hardware
4
virt. To test complex topologies the q35 test has two PCIe buses that
5
on i.MX31 does not support pretimeouts.
5
bypass the IOMMU (and are therefore not described by VIOT), and two
6
buses that are translated by virtio-iommu.
6
7
7
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
8
Reviewed-by: Eric Auger <eric.auger@redhat.com>
8
Message-id: 20200517162135.110364-3-linux@roeck-us.net
9
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
10
Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
11
Message-id: 20211210170415.583179-7-jean-philippe@linaro.org
9
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
12
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
10
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
11
---
13
---
12
include/hw/watchdog/wdt_imx2.h | 61 ++++++++-
14
tests/qtest/bios-tables-test.c | 38 ++++++++++++++++++++++++++++++++++
13
hw/watchdog/wdt_imx2.c | 239 +++++++++++++++++++++++++++++++--
15
1 file changed, 38 insertions(+)
14
2 files changed, 285 insertions(+), 15 deletions(-)
15
16
16
diff --git a/include/hw/watchdog/wdt_imx2.h b/include/hw/watchdog/wdt_imx2.h
17
diff --git a/tests/qtest/bios-tables-test.c b/tests/qtest/bios-tables-test.c
17
index XXXXXXX..XXXXXXX 100644
18
index XXXXXXX..XXXXXXX 100644
18
--- a/include/hw/watchdog/wdt_imx2.h
19
--- a/tests/qtest/bios-tables-test.c
19
+++ b/include/hw/watchdog/wdt_imx2.h
20
+++ b/tests/qtest/bios-tables-test.c
20
@@ -XXX,XX +XXX,XX @@
21
@@ -XXX,XX +XXX,XX @@ static void test_acpi_virt_tcg(void)
21
#ifndef IMX2_WDT_H
22
free_test_data(&data);
22
#define IMX2_WDT_H
23
}
23
24
24
+#include "qemu/bitops.h"
25
+static void test_acpi_q35_viot(void)
25
#include "hw/sysbus.h"
26
+{
26
+#include "hw/irq.h"
27
+ test_data data = {
27
+#include "hw/ptimer.h"
28
+ .machine = MACHINE_Q35,
28
29
+ .variant = ".viot",
29
#define TYPE_IMX2_WDT "imx2.wdt"
30
+ };
30
#define IMX2_WDT(obj) OBJECT_CHECK(IMX2WdtState, (obj), TYPE_IMX2_WDT)
31
32
enum IMX2WdtRegisters {
33
- IMX2_WDT_WCR = 0x0000,
34
- IMX2_WDT_REG_NUM = 0x0008 / sizeof(uint16_t) + 1,
35
+ IMX2_WDT_WCR = 0x0000, /* Control Register */
36
+ IMX2_WDT_WSR = 0x0002, /* Service Register */
37
+ IMX2_WDT_WRSR = 0x0004, /* Reset Status Register */
38
+ IMX2_WDT_WICR = 0x0006, /* Interrupt Control Register */
39
+ IMX2_WDT_WMCR = 0x0008, /* Misc Register */
40
};
41
42
+#define IMX2_WDT_MMIO_SIZE 0x000a
43
+
31
+
44
+/* Control Register definitions */
32
+ /*
45
+#define IMX2_WDT_WCR_WT (0xFF << 8) /* Watchdog Timeout Field */
33
+ * To keep things interesting, two buses bypass the IOMMU.
46
+#define IMX2_WDT_WCR_WDW BIT(7) /* WDOG Disable for Wait */
34
+ * VIOT should only describes the other two buses.
47
+#define IMX2_WDT_WCR_WDA BIT(5) /* WDOG Assertion */
35
+ */
48
+#define IMX2_WDT_WCR_SRS BIT(4) /* Software Reset Signal */
36
+ test_acpi_one("-machine default_bus_bypass_iommu=on "
49
+#define IMX2_WDT_WCR_WDT BIT(3) /* WDOG Timeout Assertion */
37
+ "-device virtio-iommu-pci "
50
+#define IMX2_WDT_WCR_WDE BIT(2) /* Watchdog Enable */
38
+ "-device pxb-pcie,bus_nr=0x10,id=pcie.100,bus=pcie.0 "
51
+#define IMX2_WDT_WCR_WDBG BIT(1) /* Watchdog Debug Enable */
39
+ "-device pxb-pcie,bus_nr=0x20,id=pcie.200,bus=pcie.0,bypass_iommu=on "
52
+#define IMX2_WDT_WCR_WDZST BIT(0) /* Watchdog Timer Suspend */
40
+ "-device pxb-pcie,bus_nr=0x30,id=pcie.300,bus=pcie.0",
53
+
41
+ &data);
54
+#define IMX2_WDT_WCR_LOCK_MASK (IMX2_WDT_WCR_WDZST | IMX2_WDT_WCR_WDBG \
42
+ free_test_data(&data);
55
+ | IMX2_WDT_WCR_WDW)
56
+
57
+/* Service Register definitions */
58
+#define IMX2_WDT_SEQ1 0x5555 /* service sequence 1 */
59
+#define IMX2_WDT_SEQ2 0xAAAA /* service sequence 2 */
60
+
61
+/* Reset Status Register definitions */
62
+#define IMX2_WDT_WRSR_TOUT BIT(1) /* Reset due to Timeout */
63
+#define IMX2_WDT_WRSR_SFTW BIT(0) /* Reset due to software reset */
64
+
65
+/* Interrupt Control Register definitions */
66
+#define IMX2_WDT_WICR_WIE BIT(15) /* Interrupt Enable */
67
+#define IMX2_WDT_WICR_WTIS BIT(14) /* Interrupt Status */
68
+#define IMX2_WDT_WICR_WICT 0xff /* Interrupt Timeout */
69
+#define IMX2_WDT_WICR_WICT_DEF 0x04 /* Default interrupt timeout (2s) */
70
+
71
+#define IMX2_WDT_WICR_LOCK_MASK (IMX2_WDT_WICR_WIE | IMX2_WDT_WICR_WICT)
72
+
73
+/* Misc Control Register definitions */
74
+#define IMX2_WDT_WMCR_PDE BIT(0) /* Power-Down Enable */
75
76
typedef struct IMX2WdtState {
77
/* <private> */
78
SysBusDevice parent_obj;
79
80
+ /*< public >*/
81
MemoryRegion mmio;
82
+ qemu_irq irq;
83
+
84
+ struct ptimer_state *timer;
85
+ struct ptimer_state *itimer;
86
+
87
+ bool pretimeout_support;
88
+ bool wicr_locked;
89
+
90
+ uint16_t wcr;
91
+ uint16_t wsr;
92
+ uint16_t wrsr;
93
+ uint16_t wicr;
94
+ uint16_t wmcr;
95
+
96
+ bool wcr_locked; /* affects WDZST, WDBG, and WDW */
97
+ bool wcr_wde_locked; /* affects WDE */
98
+ bool wcr_wdt_locked; /* affects WDT (never cleared) */
99
} IMX2WdtState;
100
101
#endif /* IMX2_WDT_H */
102
diff --git a/hw/watchdog/wdt_imx2.c b/hw/watchdog/wdt_imx2.c
103
index XXXXXXX..XXXXXXX 100644
104
--- a/hw/watchdog/wdt_imx2.c
105
+++ b/hw/watchdog/wdt_imx2.c
106
@@ -XXX,XX +XXX,XX @@
107
#include "qemu/bitops.h"
108
#include "qemu/module.h"
109
#include "sysemu/watchdog.h"
110
+#include "migration/vmstate.h"
111
+#include "hw/qdev-properties.h"
112
113
#include "hw/watchdog/wdt_imx2.h"
114
115
-#define IMX2_WDT_WCR_WDA BIT(5) /* -> External Reset WDOG_B */
116
-#define IMX2_WDT_WCR_SRS BIT(4) /* -> Software Reset Signal */
117
-
118
-static uint64_t imx2_wdt_read(void *opaque, hwaddr addr,
119
- unsigned int size)
120
+static void imx2_wdt_interrupt(void *opaque)
121
{
122
+ IMX2WdtState *s = IMX2_WDT(opaque);
123
+
124
+ s->wicr |= IMX2_WDT_WICR_WTIS;
125
+ qemu_set_irq(s->irq, 1);
126
+}
43
+}
127
+
44
+
128
+static void imx2_wdt_expired(void *opaque)
45
+static void test_acpi_virt_viot(void)
129
+{
46
+{
130
+ IMX2WdtState *s = IMX2_WDT(opaque);
47
+ test_data data = {
48
+ .machine = "virt",
49
+ .uefi_fl1 = "pc-bios/edk2-aarch64-code.fd",
50
+ .uefi_fl2 = "pc-bios/edk2-arm-vars.fd",
51
+ .cd = "tests/data/uefi-boot-images/bios-tables-test.aarch64.iso.qcow2",
52
+ .ram_start = 0x40000000ULL,
53
+ .scan_len = 128ULL * 1024 * 1024,
54
+ };
131
+
55
+
132
+ s->wrsr = IMX2_WDT_WRSR_TOUT;
56
+ test_acpi_one("-cpu cortex-a57 "
133
+
57
+ "-device virtio-iommu-pci", &data);
134
+ /* Perform watchdog action if watchdog is enabled */
58
+ free_test_data(&data);
135
+ if (s->wcr & IMX2_WDT_WCR_WDE) {
136
+ s->wrsr = IMX2_WDT_WRSR_TOUT;
137
+ watchdog_perform_action();
138
+ }
139
+}
59
+}
140
+
60
+
141
+static void imx2_wdt_reset(DeviceState *dev)
61
static void test_oem_fields(test_data *data)
142
+{
143
+ IMX2WdtState *s = IMX2_WDT(dev);
144
+
145
+ ptimer_transaction_begin(s->timer);
146
+ ptimer_stop(s->timer);
147
+ ptimer_transaction_commit(s->timer);
148
+
149
+ if (s->pretimeout_support) {
150
+ ptimer_transaction_begin(s->itimer);
151
+ ptimer_stop(s->itimer);
152
+ ptimer_transaction_commit(s->itimer);
153
+ }
154
+
155
+ s->wicr_locked = false;
156
+ s->wcr_locked = false;
157
+ s->wcr_wde_locked = false;
158
+
159
+ s->wcr = IMX2_WDT_WCR_WDA | IMX2_WDT_WCR_SRS;
160
+ s->wsr = 0;
161
+ s->wrsr &= ~(IMX2_WDT_WRSR_TOUT | IMX2_WDT_WRSR_SFTW);
162
+ s->wicr = IMX2_WDT_WICR_WICT_DEF;
163
+ s->wmcr = IMX2_WDT_WMCR_PDE;
164
+}
165
+
166
+static uint64_t imx2_wdt_read(void *opaque, hwaddr addr, unsigned int size)
167
+{
168
+ IMX2WdtState *s = IMX2_WDT(opaque);
169
+
170
+ switch (addr) {
171
+ case IMX2_WDT_WCR:
172
+ return s->wcr;
173
+ case IMX2_WDT_WSR:
174
+ return s->wsr;
175
+ case IMX2_WDT_WRSR:
176
+ return s->wrsr;
177
+ case IMX2_WDT_WICR:
178
+ return s->wicr;
179
+ case IMX2_WDT_WMCR:
180
+ return s->wmcr;
181
+ }
182
return 0;
183
}
184
185
+static void imx_wdt2_update_itimer(IMX2WdtState *s, bool start)
186
+{
187
+ bool running = (s->wcr & IMX2_WDT_WCR_WDE) && (s->wcr & IMX2_WDT_WCR_WT);
188
+ bool enabled = s->wicr & IMX2_WDT_WICR_WIE;
189
+
190
+ ptimer_transaction_begin(s->itimer);
191
+ if (start || !enabled) {
192
+ ptimer_stop(s->itimer);
193
+ }
194
+ if (running && enabled) {
195
+ int count = ptimer_get_count(s->timer);
196
+ int pretimeout = s->wicr & IMX2_WDT_WICR_WICT;
197
+
198
+ /*
199
+ * Only (re-)start pretimeout timer if its counter value is larger
200
+ * than 0. Otherwise it will fire right away and we'll get an
201
+ * interrupt loop.
202
+ */
203
+ if (count > pretimeout) {
204
+ ptimer_set_count(s->itimer, count - pretimeout);
205
+ if (start) {
206
+ ptimer_run(s->itimer, 1);
207
+ }
208
+ }
209
+ }
210
+ ptimer_transaction_commit(s->itimer);
211
+}
212
+
213
+static void imx_wdt2_update_timer(IMX2WdtState *s, bool start)
214
+{
215
+ ptimer_transaction_begin(s->timer);
216
+ if (start) {
217
+ ptimer_stop(s->timer);
218
+ }
219
+ if ((s->wcr & IMX2_WDT_WCR_WDE) && (s->wcr & IMX2_WDT_WCR_WT)) {
220
+ int count = (s->wcr & IMX2_WDT_WCR_WT) >> 8;
221
+
222
+ /* A value of 0 reflects one period (0.5s). */
223
+ ptimer_set_count(s->timer, count + 1);
224
+ if (start) {
225
+ ptimer_run(s->timer, 1);
226
+ }
227
+ }
228
+ ptimer_transaction_commit(s->timer);
229
+ if (s->pretimeout_support) {
230
+ imx_wdt2_update_itimer(s, start);
231
+ }
232
+}
233
+
234
static void imx2_wdt_write(void *opaque, hwaddr addr,
235
uint64_t value, unsigned int size)
236
{
62
{
237
- if (addr == IMX2_WDT_WCR &&
63
int i;
238
- (~value & (IMX2_WDT_WCR_WDA | IMX2_WDT_WCR_SRS))) {
64
@@ -XXX,XX +XXX,XX @@ int main(int argc, char *argv[])
239
- watchdog_perform_action();
65
qtest_add_func("acpi/q35/kvm/xapic", test_acpi_q35_kvm_xapic);
240
+ IMX2WdtState *s = IMX2_WDT(opaque);
66
qtest_add_func("acpi/q35/kvm/dmar", test_acpi_q35_kvm_dmar);
241
+
67
}
242
+ switch (addr) {
68
+ qtest_add_func("acpi/q35/viot", test_acpi_q35_viot);
243
+ case IMX2_WDT_WCR:
69
} else if (strcmp(arch, "aarch64") == 0) {
244
+ if (s->wcr_locked) {
70
if (has_tcg) {
245
+ value &= ~IMX2_WDT_WCR_LOCK_MASK;
71
qtest_add_func("acpi/virt", test_acpi_virt_tcg);
246
+ value |= (s->wicr & IMX2_WDT_WCR_LOCK_MASK);
72
@@ -XXX,XX +XXX,XX @@ int main(int argc, char *argv[])
247
+ }
73
qtest_add_func("acpi/virt/memhp", test_acpi_virt_tcg_memhp);
248
+ s->wcr_locked = true;
74
qtest_add_func("acpi/virt/pxb", test_acpi_virt_tcg_pxb);
249
+ if (s->wcr_wde_locked) {
75
qtest_add_func("acpi/virt/oem-fields", test_acpi_oem_fields_virt);
250
+ value &= ~IMX2_WDT_WCR_WDE;
76
+ qtest_add_func("acpi/virt/viot", test_acpi_virt_viot);
251
+ value |= (s->wicr & ~IMX2_WDT_WCR_WDE);
77
}
252
+ } else if (value & IMX2_WDT_WCR_WDE) {
253
+ s->wcr_wde_locked = true;
254
+ }
255
+ if (s->wcr_wdt_locked) {
256
+ value &= ~IMX2_WDT_WCR_WDT;
257
+ value |= (s->wicr & ~IMX2_WDT_WCR_WDT);
258
+ } else if (value & IMX2_WDT_WCR_WDT) {
259
+ s->wcr_wdt_locked = true;
260
+ }
261
+
262
+ s->wcr = value;
263
+ if (!(value & IMX2_WDT_WCR_SRS)) {
264
+ s->wrsr = IMX2_WDT_WRSR_SFTW;
265
+ }
266
+ if (!(value & (IMX2_WDT_WCR_WDA | IMX2_WDT_WCR_SRS)) ||
267
+ (!(value & IMX2_WDT_WCR_WT) && (value & IMX2_WDT_WCR_WDE))) {
268
+ watchdog_perform_action();
269
+ }
270
+ s->wcr |= IMX2_WDT_WCR_SRS;
271
+ imx_wdt2_update_timer(s, true);
272
+ break;
273
+ case IMX2_WDT_WSR:
274
+ if (s->wsr == IMX2_WDT_SEQ1 && value == IMX2_WDT_SEQ2) {
275
+ imx_wdt2_update_timer(s, false);
276
+ }
277
+ s->wsr = value;
278
+ break;
279
+ case IMX2_WDT_WRSR:
280
+ break;
281
+ case IMX2_WDT_WICR:
282
+ if (!s->pretimeout_support) {
283
+ return;
284
+ }
285
+ value &= IMX2_WDT_WICR_LOCK_MASK | IMX2_WDT_WICR_WTIS;
286
+ if (s->wicr_locked) {
287
+ value &= IMX2_WDT_WICR_WTIS;
288
+ value |= (s->wicr & IMX2_WDT_WICR_LOCK_MASK);
289
+ }
290
+ s->wicr = value | (s->wicr & IMX2_WDT_WICR_WTIS);
291
+ if (value & IMX2_WDT_WICR_WTIS) {
292
+ s->wicr &= ~IMX2_WDT_WICR_WTIS;
293
+ qemu_set_irq(s->irq, 0);
294
+ }
295
+ imx_wdt2_update_itimer(s, true);
296
+ s->wicr_locked = true;
297
+ break;
298
+ case IMX2_WDT_WMCR:
299
+ s->wmcr = value & IMX2_WDT_WMCR_PDE;
300
+ break;
301
}
78
}
302
}
79
ret = g_test_run();
303
304
@@ -XXX,XX +XXX,XX @@ static const MemoryRegionOps imx2_wdt_ops = {
305
* real device but in practice there is no reason for a guest
306
* to access this device unaligned.
307
*/
308
- .min_access_size = 4,
309
- .max_access_size = 4,
310
+ .min_access_size = 2,
311
+ .max_access_size = 2,
312
.unaligned = false,
313
},
314
};
315
316
+static const VMStateDescription vmstate_imx2_wdt = {
317
+ .name = "imx2.wdt",
318
+ .fields = (VMStateField[]) {
319
+ VMSTATE_PTIMER(timer, IMX2WdtState),
320
+ VMSTATE_PTIMER(itimer, IMX2WdtState),
321
+ VMSTATE_BOOL(wicr_locked, IMX2WdtState),
322
+ VMSTATE_BOOL(wcr_locked, IMX2WdtState),
323
+ VMSTATE_BOOL(wcr_wde_locked, IMX2WdtState),
324
+ VMSTATE_BOOL(wcr_wdt_locked, IMX2WdtState),
325
+ VMSTATE_UINT16(wcr, IMX2WdtState),
326
+ VMSTATE_UINT16(wsr, IMX2WdtState),
327
+ VMSTATE_UINT16(wrsr, IMX2WdtState),
328
+ VMSTATE_UINT16(wmcr, IMX2WdtState),
329
+ VMSTATE_UINT16(wicr, IMX2WdtState),
330
+ VMSTATE_END_OF_LIST()
331
+ }
332
+};
333
+
334
static void imx2_wdt_realize(DeviceState *dev, Error **errp)
335
{
336
IMX2WdtState *s = IMX2_WDT(dev);
337
+ SysBusDevice *sbd = SYS_BUS_DEVICE(dev);
338
339
memory_region_init_io(&s->mmio, OBJECT(dev),
340
&imx2_wdt_ops, s,
341
- TYPE_IMX2_WDT".mmio",
342
- IMX2_WDT_REG_NUM * sizeof(uint16_t));
343
- sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->mmio);
344
+ TYPE_IMX2_WDT,
345
+ IMX2_WDT_MMIO_SIZE);
346
+ sysbus_init_mmio(sbd, &s->mmio);
347
+ sysbus_init_irq(sbd, &s->irq);
348
+
349
+ s->timer = ptimer_init(imx2_wdt_expired, s,
350
+ PTIMER_POLICY_NO_IMMEDIATE_TRIGGER |
351
+ PTIMER_POLICY_NO_IMMEDIATE_RELOAD |
352
+ PTIMER_POLICY_NO_COUNTER_ROUND_DOWN);
353
+ ptimer_transaction_begin(s->timer);
354
+ ptimer_set_freq(s->timer, 2);
355
+ ptimer_set_limit(s->timer, 0xff, 1);
356
+ ptimer_transaction_commit(s->timer);
357
+ if (s->pretimeout_support) {
358
+ s->itimer = ptimer_init(imx2_wdt_interrupt, s,
359
+ PTIMER_POLICY_NO_IMMEDIATE_TRIGGER |
360
+ PTIMER_POLICY_NO_IMMEDIATE_RELOAD |
361
+ PTIMER_POLICY_NO_COUNTER_ROUND_DOWN);
362
+ ptimer_transaction_begin(s->itimer);
363
+ ptimer_set_freq(s->itimer, 2);
364
+ ptimer_set_limit(s->itimer, 0xff, 1);
365
+ ptimer_transaction_commit(s->itimer);
366
+ }
367
}
368
369
+static Property imx2_wdt_properties[] = {
370
+ DEFINE_PROP_BOOL("pretimeout-support", IMX2WdtState, pretimeout_support,
371
+ false),
372
+};
373
+
374
static void imx2_wdt_class_init(ObjectClass *klass, void *data)
375
{
376
DeviceClass *dc = DEVICE_CLASS(klass);
377
378
+ device_class_set_props(dc, imx2_wdt_properties);
379
dc->realize = imx2_wdt_realize;
380
+ dc->reset = imx2_wdt_reset;
381
+ dc->vmsd = &vmstate_imx2_wdt;
382
+ dc->desc = "i.MX watchdog timer";
383
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
384
}
385
386
--
80
--
387
2.20.1
81
2.25.1
388
82
389
83
diff view generated by jsdifflib
New patch
1
1
From: Jean-Philippe Brucker <jean-philippe@linaro.org>
2
3
Add expected blobs of the VIOT and DSDT table for the VIOT test on the
4
q35 machine.
5
6
Since the test instantiates a virtio device and two PCIe expander
7
bridges, DSDT.viot has more blocks than the base DSDT.
8
9
The VIOT table generated for the q35 test is:
10
11
[000h 0000 4] Signature : "VIOT" [Virtual I/O Translation Table]
12
[004h 0004 4] Table Length : 00000070
13
[008h 0008 1] Revision : 00
14
[009h 0009 1] Checksum : 3D
15
[00Ah 0010 6] Oem ID : "BOCHS "
16
[010h 0016 8] Oem Table ID : "BXPC "
17
[018h 0024 4] Oem Revision : 00000001
18
[01Ch 0028 4] Asl Compiler ID : "BXPC"
19
[020h 0032 4] Asl Compiler Revision : 00000001
20
21
[024h 0036 2] Node count : 0003
22
[026h 0038 2] Node offset : 0030
23
[028h 0040 8] Reserved : 0000000000000000
24
25
[030h 0048 1] Type : 03 [VirtIO-PCI IOMMU]
26
[031h 0049 1] Reserved : 00
27
[032h 0050 2] Length : 0010
28
29
[034h 0052 2] PCI Segment : 0000
30
[036h 0054 2] PCI BDF number : 0010
31
[038h 0056 8] Reserved : 0000000000000000
32
33
[040h 0064 1] Type : 01 [PCI Range]
34
[041h 0065 1] Reserved : 00
35
[042h 0066 2] Length : 0018
36
37
[044h 0068 4] Endpoint start : 00003000
38
[048h 0072 2] PCI Segment start : 0000
39
[04Ah 0074 2] PCI Segment end : 0000
40
[04Ch 0076 2] PCI BDF start : 3000
41
[04Eh 0078 2] PCI BDF end : 30FF
42
[050h 0080 2] Output node : 0030
43
[052h 0082 6] Reserved : 000000000000
44
45
[058h 0088 1] Type : 01 [PCI Range]
46
[059h 0089 1] Reserved : 00
47
[05Ah 0090 2] Length : 0018
48
49
[05Ch 0092 4] Endpoint start : 00001000
50
[060h 0096 2] PCI Segment start : 0000
51
[062h 0098 2] PCI Segment end : 0000
52
[064h 0100 2] PCI BDF start : 1000
53
[066h 0102 2] PCI BDF end : 10FF
54
[068h 0104 2] Output node : 0030
55
[06Ah 0106 6] Reserved : 000000000000
56
57
And the DSDT diff is:
58
59
@@ -XXX,XX +XXX,XX @@
60
*
61
* Disassembling to symbolic ASL+ operators
62
*
63
- * Disassembly of tests/data/acpi/q35/DSDT, Fri Dec 10 15:03:08 2021
64
+ * Disassembly of /tmp/aml-H9Y5D1, Fri Dec 10 15:02:27 2021
65
*
66
* Original Table Header:
67
* Signature "DSDT"
68
- * Length 0x00002061 (8289)
69
+ * Length 0x000024B6 (9398)
70
* Revision 0x01 **** 32-bit table (V1), no 64-bit math support
71
- * Checksum 0xFA
72
+ * Checksum 0xA7
73
* OEM ID "BOCHS "
74
* OEM Table ID "BXPC "
75
* OEM Revision 0x00000001 (1)
76
@@ -XXX,XX +XXX,XX @@
77
}
78
}
79
80
+ Scope (\_SB)
81
+ {
82
+ Device (PC30)
83
+ {
84
+ Name (_UID, 0x30) // _UID: Unique ID
85
+ Name (_BBN, 0x30) // _BBN: BIOS Bus Number
86
+ Name (_HID, EisaId ("PNP0A08") /* PCI Express Bus */) // _HID: Hardware ID
87
+ Name (_CID, EisaId ("PNP0A03") /* PCI Bus */) // _CID: Compatible ID
88
+ Method (_OSC, 4, NotSerialized) // _OSC: Operating System Capabilities
89
+ {
90
+ CreateDWordField (Arg3, Zero, CDW1)
91
+ If ((Arg0 == ToUUID ("33db4d5b-1ff7-401c-9657-7441c03dd766") /* PCI Host Bridge Device */))
92
+ {
93
+ CreateDWordField (Arg3, 0x04, CDW2)
94
+ CreateDWordField (Arg3, 0x08, CDW3)
95
+ Local0 = CDW3 /* \_SB_.PC30._OSC.CDW3 */
96
+ Local0 &= 0x1F
97
+ If ((Arg1 != One))
98
+ {
99
+ CDW1 |= 0x08
100
+ }
101
+
102
+ If ((CDW3 != Local0))
103
+ {
104
+ CDW1 |= 0x10
105
+ }
106
+
107
+ CDW3 = Local0
108
+ }
109
+ Else
110
+ {
111
+ CDW1 |= 0x04
112
+ }
113
+
114
+ Return (Arg3)
115
+ }
116
+
117
+ Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table
118
+ {
119
+ Local0 = Package (0x80){}
120
+ Local1 = Zero
121
+ While ((Local1 < 0x80))
122
+ {
123
+ Local2 = (Local1 >> 0x02)
124
+ Local3 = ((Local1 + Local2) & 0x03)
125
+ If ((Local3 == Zero))
126
+ {
127
+ Local4 = Package (0x04)
128
+ {
129
+ Zero,
130
+ Zero,
131
+ LNKD,
132
+ Zero
133
+ }
134
+ }
135
+
136
+ If ((Local3 == One))
137
+ {
138
+ Local4 = Package (0x04)
139
+ {
140
+ Zero,
141
+ Zero,
142
+ LNKA,
143
+ Zero
144
+ }
145
+ }
146
+
147
+ If ((Local3 == 0x02))
148
+ {
149
+ Local4 = Package (0x04)
150
+ {
151
+ Zero,
152
+ Zero,
153
+ LNKB,
154
+ Zero
155
+ }
156
+ }
157
+
158
+ If ((Local3 == 0x03))
159
+ {
160
+ Local4 = Package (0x04)
161
+ {
162
+ Zero,
163
+ Zero,
164
+ LNKC,
165
+ Zero
166
+ }
167
+ }
168
+
169
+ Local4 [Zero] = ((Local2 << 0x10) | 0xFFFF)
170
+ Local4 [One] = (Local1 & 0x03)
171
+ Local0 [Local1] = Local4
172
+ Local1++
173
+ }
174
+
175
+ Return (Local0)
176
+ }
177
+
178
+ Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
179
+ {
180
+ WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode,
181
+ 0x0000, // Granularity
182
+ 0x0030, // Range Minimum
183
+ 0x0030, // Range Maximum
184
+ 0x0000, // Translation Offset
185
+ 0x0001, // Length
186
+ ,, )
187
+ })
188
+ }
189
+ }
190
+
191
+ Scope (\_SB)
192
+ {
193
+ Device (PC20)
194
+ {
195
+ Name (_UID, 0x20) // _UID: Unique ID
196
+ Name (_BBN, 0x20) // _BBN: BIOS Bus Number
197
+ Name (_HID, EisaId ("PNP0A08") /* PCI Express Bus */) // _HID: Hardware ID
198
+ Name (_CID, EisaId ("PNP0A03") /* PCI Bus */) // _CID: Compatible ID
199
+ Method (_OSC, 4, NotSerialized) // _OSC: Operating System Capabilities
200
+ {
201
+ CreateDWordField (Arg3, Zero, CDW1)
202
+ If ((Arg0 == ToUUID ("33db4d5b-1ff7-401c-9657-7441c03dd766") /* PCI Host Bridge Device */))
203
+ {
204
+ CreateDWordField (Arg3, 0x04, CDW2)
205
+ CreateDWordField (Arg3, 0x08, CDW3)
206
+ Local0 = CDW3 /* \_SB_.PC20._OSC.CDW3 */
207
+ Local0 &= 0x1F
208
+ If ((Arg1 != One))
209
+ {
210
+ CDW1 |= 0x08
211
+ }
212
+
213
+ If ((CDW3 != Local0))
214
+ {
215
+ CDW1 |= 0x10
216
+ }
217
+
218
+ CDW3 = Local0
219
+ }
220
+ Else
221
+ {
222
+ CDW1 |= 0x04
223
+ }
224
+
225
+ Return (Arg3)
226
+ }
227
+
228
+ Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table
229
+ {
230
+ Local0 = Package (0x80){}
231
+ Local1 = Zero
232
+ While ((Local1 < 0x80))
233
+ {
234
+ Local2 = (Local1 >> 0x02)
235
+ Local3 = ((Local1 + Local2) & 0x03)
236
+ If ((Local3 == Zero))
237
+ {
238
+ Local4 = Package (0x04)
239
+ {
240
+ Zero,
241
+ Zero,
242
+ LNKD,
243
+ Zero
244
+ }
245
+ }
246
+
247
+ If ((Local3 == One))
248
+ {
249
+ Local4 = Package (0x04)
250
+ {
251
+ Zero,
252
+ Zero,
253
+ LNKA,
254
+ Zero
255
+ }
256
+ }
257
+
258
+ If ((Local3 == 0x02))
259
+ {
260
+ Local4 = Package (0x04)
261
+ {
262
+ Zero,
263
+ Zero,
264
+ LNKB,
265
+ Zero
266
+ }
267
+ }
268
+
269
+ If ((Local3 == 0x03))
270
+ {
271
+ Local4 = Package (0x04)
272
+ {
273
+ Zero,
274
+ Zero,
275
+ LNKC,
276
+ Zero
277
+ }
278
+ }
279
+
280
+ Local4 [Zero] = ((Local2 << 0x10) | 0xFFFF)
281
+ Local4 [One] = (Local1 & 0x03)
282
+ Local0 [Local1] = Local4
283
+ Local1++
284
+ }
285
+
286
+ Return (Local0)
287
+ }
288
+
289
+ Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
290
+ {
291
+ WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode,
292
+ 0x0000, // Granularity
293
+ 0x0020, // Range Minimum
294
+ 0x0020, // Range Maximum
295
+ 0x0000, // Translation Offset
296
+ 0x0001, // Length
297
+ ,, )
298
+ })
299
+ }
300
+ }
301
+
302
+ Scope (\_SB)
303
+ {
304
+ Device (PC10)
305
+ {
306
+ Name (_UID, 0x10) // _UID: Unique ID
307
+ Name (_BBN, 0x10) // _BBN: BIOS Bus Number
308
+ Name (_HID, EisaId ("PNP0A08") /* PCI Express Bus */) // _HID: Hardware ID
309
+ Name (_CID, EisaId ("PNP0A03") /* PCI Bus */) // _CID: Compatible ID
310
+ Method (_OSC, 4, NotSerialized) // _OSC: Operating System Capabilities
311
+ {
312
+ CreateDWordField (Arg3, Zero, CDW1)
313
+ If ((Arg0 == ToUUID ("33db4d5b-1ff7-401c-9657-7441c03dd766") /* PCI Host Bridge Device */))
314
+ {
315
+ CreateDWordField (Arg3, 0x04, CDW2)
316
+ CreateDWordField (Arg3, 0x08, CDW3)
317
+ Local0 = CDW3 /* \_SB_.PC10._OSC.CDW3 */
318
+ Local0 &= 0x1F
319
+ If ((Arg1 != One))
320
+ {
321
+ CDW1 |= 0x08
322
+ }
323
+
324
+ If ((CDW3 != Local0))
325
+ {
326
+ CDW1 |= 0x10
327
+ }
328
+
329
+ CDW3 = Local0
330
+ }
331
+ Else
332
+ {
333
+ CDW1 |= 0x04
334
+ }
335
+
336
+ Return (Arg3)
337
+ }
338
+
339
+ Method (_PRT, 0, NotSerialized) // _PRT: PCI Routing Table
340
+ {
341
+ Local0 = Package (0x80){}
342
+ Local1 = Zero
343
+ While ((Local1 < 0x80))
344
+ {
345
+ Local2 = (Local1 >> 0x02)
346
+ Local3 = ((Local1 + Local2) & 0x03)
347
+ If ((Local3 == Zero))
348
+ {
349
+ Local4 = Package (0x04)
350
+ {
351
+ Zero,
352
+ Zero,
353
+ LNKD,
354
+ Zero
355
+ }
356
+ }
357
+
358
+ If ((Local3 == One))
359
+ {
360
+ Local4 = Package (0x04)
361
+ {
362
+ Zero,
363
+ Zero,
364
+ LNKA,
365
+ Zero
366
+ }
367
+ }
368
+
369
+ If ((Local3 == 0x02))
370
+ {
371
+ Local4 = Package (0x04)
372
+ {
373
+ Zero,
374
+ Zero,
375
+ LNKB,
376
+ Zero
377
+ }
378
+ }
379
+
380
+ If ((Local3 == 0x03))
381
+ {
382
+ Local4 = Package (0x04)
383
+ {
384
+ Zero,
385
+ Zero,
386
+ LNKC,
387
+ Zero
388
+ }
389
+ }
390
+
391
+ Local4 [Zero] = ((Local2 << 0x10) | 0xFFFF)
392
+ Local4 [One] = (Local1 & 0x03)
393
+ Local0 [Local1] = Local4
394
+ Local1++
395
+ }
396
+
397
+ Return (Local0)
398
+ }
399
+
400
+ Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
401
+ {
402
+ WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode,
403
+ 0x0000, // Granularity
404
+ 0x0010, // Range Minimum
405
+ 0x0010, // Range Maximum
406
+ 0x0000, // Translation Offset
407
+ 0x0001, // Length
408
+ ,, )
409
+ })
410
+ }
411
+ }
412
+
413
Scope (\_SB.PCI0)
414
{
415
Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings
416
@@ -XXX,XX +XXX,XX @@
417
WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode,
418
0x0000, // Granularity
419
0x0000, // Range Minimum
420
- 0x00FF, // Range Maximum
421
+ 0x000F, // Range Maximum
422
0x0000, // Translation Offset
423
- 0x0100, // Length
424
+ 0x0010, // Length
425
,, )
426
IO (Decode16,
427
0x0CF8, // Range Minimum
428
@@ -XXX,XX +XXX,XX @@
429
}
430
}
431
432
+ Device (S10)
433
+ {
434
+ Name (_ADR, 0x00020000) // _ADR: Address
435
+ }
436
+
437
+ Device (S18)
438
+ {
439
+ Name (_ADR, 0x00030000) // _ADR: Address
440
+ }
441
+
442
+ Device (S20)
443
+ {
444
+ Name (_ADR, 0x00040000) // _ADR: Address
445
+ }
446
+
447
+ Device (S28)
448
+ {
449
+ Name (_ADR, 0x00050000) // _ADR: Address
450
+ }
451
+
452
Method (PCNT, 0, NotSerialized)
453
{
454
}
455
456
Reviewed-by: Eric Auger <eric.auger@redhat.com>
457
Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
458
Message-id: 20211210170415.583179-8-jean-philippe@linaro.org
459
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
460
---
461
tests/qtest/bios-tables-test-allowed-diff.h | 2 --
462
tests/data/acpi/q35/DSDT.viot | Bin 0 -> 9398 bytes
463
tests/data/acpi/q35/VIOT.viot | Bin 0 -> 112 bytes
464
3 files changed, 2 deletions(-)
465
466
diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios-tables-test-allowed-diff.h
467
index XXXXXXX..XXXXXXX 100644
468
--- a/tests/qtest/bios-tables-test-allowed-diff.h
469
+++ b/tests/qtest/bios-tables-test-allowed-diff.h
470
@@ -XXX,XX +XXX,XX @@
471
/* List of comma-separated changed AML files to ignore */
472
"tests/data/acpi/virt/VIOT",
473
-"tests/data/acpi/q35/DSDT.viot",
474
-"tests/data/acpi/q35/VIOT.viot",
475
diff --git a/tests/data/acpi/q35/DSDT.viot b/tests/data/acpi/q35/DSDT.viot
476
index XXXXXXX..XXXXXXX 100644
477
GIT binary patch
478
literal 9398
479
zcmeHNO>7&-8J*>iv|O&FB}G~Oi$yp||57BBoWHhc5OS9yDTx$CQgH$r;8Idr*-4Q_
480
z5(9Az1F`}niVsB-)<KW7p`g9Br(A2Gm-gmc1N78GFS!;)e2V(MnH_0{q<{#yMgn&C
481
zn|*J-d9yqFhO_H6z19~`FlPL*u<DkZ*}|)JH;X@mF-FI<cPg<fti9tEN*yB^i5czN
482
zNq&q?!OZ;BE3B7{KWzJ-`Tn~f`9?Qj8~2^N8{Oc8J%57{==w%rS#;nOCp*nTr@iZ1
483
zb+?i;JLQUJ=O0?8*>S~D)a>NF1~WVB6^~_B#yhJ`H+JU@=6aXs`?Yv)J2h=N?drcS
484
zeLZ*n<<Bm^n}6`jfBx#u8&(W}1?)}iF9o#mZ~E2+zwdn7yK3AbIzKnxpZ>JRPm3~#
485
z&ICS{+_OayRW-l=Mtk=~uaS3o8z<_udd|(wqg`&JnVPfCe>BUOO`Su3e>pff_^UW%
486
z&JE^NO`)=Amg~iqRB1pPscP?(>#ZuY8GHCmlEvD$9g3%4Db~Dfz2SATnddvrR-Oe^
487
z;s;dJec!hnzi)ri^I6YN9vtkm{^TdUF8h7gX8-<Qe4p)GQ=)AtYx2VcwdLVAEXEjG
488
z^Mj|UHPqkj-LsWuzQem1>F3atdZn=zv3$#RmZzSHN+6-yyU#8cJb=YDilX&sl}vNm
489
znkgAR^O<3kj4if>{ly5fwRfMWuC5=lrlvKPX~i#654Cp}R_d*JS$9laZ$ra6)<ns8
490
zFZy28G%xP(nit&F>LDi%G<tIc=TY=gl$jSD&Uv!Yat~XR46h%rI$!}a%!|xG7u8Zn
491
zeY8_|n=K>xz_v_W8VX$W-Fg-qFWcT}7MCyz{%%{ia7hZ>Law-k6NOr}VI&_48U=2l
492
zwqDKFE8eTwwozDdms#e?x?5a|v>&JF;2_v0L~z5n%BYU^52<*cWuD4|GYUm@1+?))
493
zte^45>Rz)t*<T5V#={r>@t@{%?^i#W{i=HAZ*Dc9y59Va-+#P!jrGs;u38a{fLr`N
494
zvT@rUu>DljxJ?^&Z?-?vyJn3C>3D=qux{Y*bs5|5n)Qmi$TD^Zdn4GU$ocJS2Hh-<
495
z`xPI^^+v0nUVdjMos8k`WGl7hA`{03ju%<lrgAHSpd^DRf-*}_#Ly0mB!LSfVgWcQ
496
z&T$@~G9)JI=hz5m0vkrel+Xy{Oh7pkAu-V!j*W7rY(bO}Q$nMH2`FbGB&N)QaV4<4
497
zo)~9JXiP9=;}NPl<C@MmXG&;XFlFNrsyfFsonxFSp<}vEgsRSQP3O3#b6nSnP}ON_
498
zI!#Tdsp~|j>ckUB>FI=~GokB5sOq#dotCE4(sd$KbtW~PNlj-`*NIToiD#j5J#9^=
499
zt?NXn>YUJYPG~wObe#xQos*i*NloXZt`niEb4t@WrRki~bs|)CI+{*L)9L6s5vn><
500
zn$DD_Go|Z9sOn5>I@6lYw5}7Os&iV?Ij!lO)^#FOb!If38BJ$K*NIToIiu;E(R9w}
501
zIuWWmPiZ<&X*y5oIuWWmF_XaEC!a&Jn$B5WCqh-{X-(&8P3LJ{Cqh-{8P3dyPr@^t
502
zSqL9?X9Uwd3W@23*s~h*tj0X6GZCuHa~kuU#yqDp5vt7d8uPryJg+kms?5hU=3^T3
503
zF`bD}WnSP+=`t5MQ$FJ_2&Q~+BP6E0f^%BVIW6a$o)e+SX~IDBih-7z6{O~7YTy`&
504
zLjy&Cv?7QikV#>n0>>@MV8oK`Gmun34-FKdlm-J8SZSaNlnhir4-FI{S|bfqV8e)V
505
zss<{chX#reE#g=hsKAC%sF6d-Km}BWs!kZFsFpKfpbC@>6rprQGEjt4Ck#|zITHq|
506
zK*>M_l;<P^MJRQ`Kn0dFVW0|>3{*fllMEE0)CmI>Sk8ojDo`>|0p(0GP=xY&!axO<
507
zGhv_#lnhirIg<<&q0|Wj6<E%MfhtfkPyyvkGEjt4Ck#|zITHq|K*>M_lrzad5lWpf
508
zP=V!47^ngz0~JutBm+e#b;3XemNQ|X3X}{~Ksl2P6rt1!0~J`#gn=qhGEf2KOfpb}
509
zQYQ>lU^x>8szAv=1(Y+%KoLrvFi?TzOc<yFB?A>u&LjgxD0RX>1(q{mpbC@>R6seC
510
z3>2Z%2?G^a&V+#~P%=;f<xDbAgi<FARA4z12C6{GKn0XD$v_cGoiI>=<xCi;0wn_#
511
zP|hR+MJRQ`Kn0dFVW0|>3{*fllMEE0)CmI>Sk8ojDo`>|0p(0GP=rz^3{+q_69%e4
512
z$v_2^Gs!>^N}VuJf#pmXr~)Me6;RG314Srx!axxz28u{EP=u<1B2)}iVZuNaCK;&0
513
zBm-5LFi?dF167!0pbC==RAItE6($T+VUmF=Ofpb~2?JG_Fi?d_2C6X0Kouqo6p_5T
514
zFi=FeV!SiSKoR0H$dH(_Z(*Q_WZ%L-5y`$K14StNmJAdjmWs}HV4<vU_xO+1efmLq
515
zZ;W>N_U)fP6Qy6Nw5mbt9Y(#emWSi66=>tq#xoh#Ue=0qyhxi8ZOUe5y0V7VfPUhp
516
zwX=;ymc+i5%sg9Ja~lZ&8oAV@mHc>&CHP9v4R(jhtT?un;O4e9#pno)Xkh7OWgK&a
517
zyj=3Iv0OuoK_;5rOr5f(Kb~ZXDBO+V`OWYo#_C08imwChQxnjdd?wZLDou8aj;$SD
518
zGDYiA3<$Tu<JnHL(KPOChi#zrR32t83}naR$+ym4P_h?z_5#|cW-nw$XD_sOtE62l
519
zrD3@*)NVyiklt0&yF9%+klsBey&I<Y2E<!f(E8TuJte)z(|ZHyy<^gQVfx}=`q&B5
520
z7nSryp1wGczIaUfVwiq$Fn#<4=@*ssi#+|}K>EdF(l3VTOM~ghPLRH&q%ZOGrGfON
521
zW73zx^yR_y<0nX8R??Sw`tm^f@-gYlNFSp|*<gA{q?Zp5Oe-+l#rmyYmKozi9y=P>
522
zVReJU*h=ZuVXiS$ohTbw-O#v9>(yZbGE|)?8(H1ZIKvV!jWa0>vy!3eMA^vdhQ>`s
523
zuMSg{q3T50$m)j1!HixV<}X9liL#N^4c*tL^y)CF8LCc{jjV3yKAqL8!%SzWI#H%q
524
z=bSrQ&)%JCRttF5g4Zf`6l?y@>PzD7MA^D>wBlcH6r1ucwJ<p0O%rZ?JzIY3-QdmZ
525
zzs|n>`a5r3e|z)wcUaqS>nqFQ-8x}eCF4u`OWUxqst-@1rSmUs%WmKP5e0dcb?e2N
526
z;Z|x*!);VwF|Yuhqs^khqOM!@u*jY!WYldISF(V6`BoNd&6Qfk3>X#SuD^7J>p_D=
527
zBPa51y^_n#=cpOt#Zf$ya$Ae9Mfz56n|<i!a=ELS@)%a{^NIH3SDuN<R~sah1km#P
528
zU@?*f%<rG=4W1wgfi;C?_n|W@%lm$&8YfvNOJodIg&IcIpIJQRHr<+ej11GQ6)&eF
529
z2Lam*jIH}#y0>KnY%4JQfOYS$*uU%f#@$U6`N8I3N-lV?5ErFCdv~xDmu2(wexld4
530
z4v^;aVAT2k6GJ^m*FD(Wqc(Qg^)6a<?}h$zLoj}4;PP!+(O{@!a1y-hoAhF_7!z+6
531
zslpAmNtYbjHrw-~#SPVk_FUf>-Obg6yV`8o$8_`PyJe_;bY5_EMBfBfWU!Q=*9HsG
532
z%_Cda{@_Krr!oHVhv9+y+T5qR8zZ2aZ>5r!$*|f$^U%yBUYfR&B!+EYy_PwL!BeUi
533
zJH^}r3r9Q+B)X@Z)fk=P13w&7x#wBtXTZ)g>WITPg5r&pQc!nmyrmk#S(>>b9xnNr
534
zx_b#v9Xv-Y><Wb%?S^0Xe&<)bbKl_=Z|3C$tf|F<bYzE*mfHB;uC)`q-?buaBe?l?
535
zcLTpK*k<49Z32`K?|nSBMFqxTK^_IE-li2fEGdK~(ZdoKBl6ab4a;Hler#`xvEXJG
536
zb?<E%EZExfX>jcOVhS*0rS~RS1dA#xhkv@Nct@#q?LyeKS<$uFec!bw>{@uu$gZ6a
537
zyVen1i{1BKd%~`D7|m$;U0a<I*3I7%^N%N%lGYdU_GS!gaR8T$NA@GzFi~z`l7hdl
538
zarZy6590|88pi(1zq;V(>38zM0sT&<zX;R5$1w3;`_JMG`;&I&0Y23DMx1%@(w(R9
539
z4M$j;D5J+Gy%fijRQsctzFKf&cv|BAz#YLq3CZJWDdtL4u1u1|mkdcUp7|sxJC+?Y
540
z_@@s`v3j}Q7*z>6X~cwUxUL8G1KT)_XTp!KAbs;vCp{K3&~_X@+ew=-D}v`2MbFV0
541
zQsVsL=rXi-pI*G|iiz;VTCutgUs)hDzV1+4?8KcoP3xROf<M%qC6lgVdpFt4<-|uM
542
z=#rl_b1#YjSIl6Toj2z_hOZcKupkdE(LozC(fN=FY(x|sk)ym|;Rq2E1xJWD%Z!ol
543
Gu>S+TT-130
544
545
literal 0
546
HcmV?d00001
547
548
diff --git a/tests/data/acpi/q35/VIOT.viot b/tests/data/acpi/q35/VIOT.viot
549
index XXXXXXX..XXXXXXX 100644
550
GIT binary patch
551
literal 112
552
zcmWIZ^baXu00LVle`k+i1*eDrX9XZ&1PX!JAex!M0Hgv8m>C3sGzdcgBZCA3T-xBj
553
Q0Zb)W9Hva*zW_`e0M!8s0RR91
554
555
literal 0
556
HcmV?d00001
557
558
--
559
2.25.1
560
561
diff view generated by jsdifflib
1
Sort the board index into alphabetical order. (Note that we need to
1
From: Jean-Philippe Brucker <jean-philippe@linaro.org>
2
sort alphabetically by the title text of each file, which isn't the
3
same ordering as sorting by the filename.)
4
2
3
The VIOT blob contains the following:
4
5
[000h 0000 4] Signature : "VIOT" [Virtual I/O Translation Table]
6
[004h 0004 4] Table Length : 00000058
7
[008h 0008 1] Revision : 00
8
[009h 0009 1] Checksum : 66
9
[00Ah 0010 6] Oem ID : "BOCHS "
10
[010h 0016 8] Oem Table ID : "BXPC "
11
[018h 0024 4] Oem Revision : 00000001
12
[01Ch 0028 4] Asl Compiler ID : "BXPC"
13
[020h 0032 4] Asl Compiler Revision : 00000001
14
15
[024h 0036 2] Node count : 0002
16
[026h 0038 2] Node offset : 0030
17
[028h 0040 8] Reserved : 0000000000000000
18
19
[030h 0048 1] Type : 03 [VirtIO-PCI IOMMU]
20
[031h 0049 1] Reserved : 00
21
[032h 0050 2] Length : 0010
22
23
[034h 0052 2] PCI Segment : 0000
24
[036h 0054 2] PCI BDF number : 0008
25
[038h 0056 8] Reserved : 0000000000000000
26
27
[040h 0064 1] Type : 01 [PCI Range]
28
[041h 0065 1] Reserved : 00
29
[042h 0066 2] Length : 0018
30
31
[044h 0068 4] Endpoint start : 00000000
32
[048h 0072 2] PCI Segment start : 0000
33
[04Ah 0074 2] PCI Segment end : 0000
34
[04Ch 0076 2] PCI BDF start : 0000
35
[04Eh 0078 2] PCI BDF end : 00FF
36
[050h 0080 2] Output node : 0030
37
[052h 0082 6] Reserved : 000000000000
38
39
Acked-by: Ani Sinha <ani@anisinha.ca>
40
Reviewed-by: Eric Auger <eric.auger@redhat.com>
41
Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
42
Message-id: 20211210170415.583179-9-jean-philippe@linaro.org
5
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
43
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
6
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
7
Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
8
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
9
Message-id: 20200507151819.28444-3-peter.maydell@linaro.org
10
---
44
---
11
docs/system/target-arm.rst | 17 +++++++++++------
45
tests/qtest/bios-tables-test-allowed-diff.h | 1 -
12
1 file changed, 11 insertions(+), 6 deletions(-)
46
tests/data/acpi/virt/VIOT | Bin 0 -> 88 bytes
47
2 files changed, 1 deletion(-)
13
48
14
diff --git a/docs/system/target-arm.rst b/docs/system/target-arm.rst
49
diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios-tables-test-allowed-diff.h
15
index XXXXXXX..XXXXXXX 100644
50
index XXXXXXX..XXXXXXX 100644
16
--- a/docs/system/target-arm.rst
51
--- a/tests/qtest/bios-tables-test-allowed-diff.h
17
+++ b/docs/system/target-arm.rst
52
+++ b/tests/qtest/bios-tables-test-allowed-diff.h
18
@@ -XXX,XX +XXX,XX @@ Unfortunately many of the Arm boards QEMU supports are currently
53
@@ -1,2 +1 @@
19
undocumented; you can get a complete list by running
54
/* List of comma-separated changed AML files to ignore */
20
``qemu-system-aarch64 --machine help``.
55
-"tests/data/acpi/virt/VIOT",
21
56
diff --git a/tests/data/acpi/virt/VIOT b/tests/data/acpi/virt/VIOT
22
+..
57
index XXXXXXX..XXXXXXX 100644
23
+ This table of contents should be kept sorted alphabetically
58
GIT binary patch
24
+ by the title text of each file, which isn't the same ordering
59
literal 88
25
+ as an alphabetical sort by filename.
60
zcmWIZ^bd((0D?3pe`k+i1*eDrX9XZ&1PX!JAexE60Hgv8m>C3sGzXN&z`)2L0cSHX
26
+
61
I{D-Rq0Q5fy0RR91
27
.. toctree::
62
28
:maxdepth: 1
63
literal 0
29
64
HcmV?d00001
30
arm/integratorcp
65
31
- arm/versatile
32
arm/realview
33
- arm/xscale
34
- arm/palm
35
- arm/nseries
36
- arm/stellaris
37
+ arm/versatile
38
arm/musicpal
39
- arm/sx1
40
+ arm/nseries
41
arm/orangepi
42
+ arm/palm
43
+ arm/xscale
44
+ arm/sx1
45
+ arm/stellaris
46
47
Arm CPU features
48
================
49
--
66
--
50
2.20.1
67
2.25.1
51
68
52
69
diff view generated by jsdifflib