1
target-arm queue: a smallish set of patches for rc1 tomorrow.
1
Patches for rc1: nothing major, just some minor bugfixes and
2
I've included the tcg patches because RTH has no others that
2
code cleanups.
3
would merit a pullreq.
4
3
5
I haven't included Thomas Huth's 17-patch set to deal with
6
the introspection crashes, to give that a little more time
7
on-list for review.
8
9
thanks
10
-- PMM
4
-- PMM
11
5
12
The following changes since commit 102ad0a80f5110483efd06877c29c4236be267f9:
6
The following changes since commit f7e1914adad8885a5d4c70239ab90d901ed97e9f:
13
7
14
Merge remote-tracking branch 'remotes/armbru/tags/pull-misc-2018-07-16' into staging (2018-07-16 15:34:38 +0100)
8
Merge remote-tracking branch 'remotes/alistair/tags/pull-riscv-to-apply-20201109' into staging (2020-11-10 09:24:56 +0000)
15
9
16
are available in the Git repository at:
10
are available in the Git repository at:
17
11
18
git://git.linaro.org/people/pmaydell/qemu-arm.git tags/pull-target-arm-20180716
12
https://git.linaro.org/people/pmaydell/qemu-arm.git tags/pull-target-arm-20201110
19
13
20
for you to fetch changes up to 3474c98a2a2afcefa7c665f02ad2bed2a43ab0f7:
14
for you to fetch changes up to b6c56c8a9a4064ea783f352f43c5df6231a110fa:
21
15
22
accel/tcg: Assert that tlb fill gave us a valid TLB entry (2018-07-16 17:26:01 +0100)
16
target/arm/translate-neon.c: Handle VTBL UNDEF case before VFP access check (2020-11-10 11:03:48 +0000)
23
17
24
----------------------------------------------------------------
18
----------------------------------------------------------------
25
target-arm queue:
19
target-arm queue:
26
* accel/tcg: Use correct test when looking in victim TLB for code
20
* hw/arm/Kconfig: ARM_V7M depends on PTIMER
27
* bcm2835_aux: Swap RX and TX interrupt assignments
21
* Minor coding style fixes
28
* hw/arm/bcm2836: Mark the bcm2836 / bcm2837 devices with user_creatable = false
22
* docs: add some notes on the sbsa-ref machine
29
* hw/intc/arm_gic: Fix handling of GICD_ITARGETSR
23
* hw/arm/virt: Remove dependency on Cortex-A15 MPCore peripherals
30
* hw/intc/arm_gic: Check interrupt number in gic_deactivate_irq()
24
* target/arm: Fix neon VTBL/VTBX for len > 1
31
* aspeed: Implement write-1-{set, clear} for AST2500 strapping
25
* hw/arm/armsse: Correct expansion MPC interrupt lines
32
* target/arm: Fix LD1W and LDFF1W (scalar plus vector)
26
* hw/misc/stm32f2xx_syscfg: Remove extraneous IRQ
27
* hw/arm/nseries: Remove invalid/unnecessary n8x0_uart_setup()
28
* hw/arm/musicpal: Don't connect two qemu_irqs directly to the same input
29
* hw/arm/musicpal: Only use qdev_get_gpio_in() when necessary
30
* hw/arm/nseries: Check return value from load_image_targphys()
31
* tests/qtest/npcm7xx_rng-test: count runs properly
32
* target/arm/translate-neon.c: Handle VTBL UNDEF case before VFP access check
33
33
34
----------------------------------------------------------------
34
----------------------------------------------------------------
35
Andrew Jeffery (1):
35
Alex Bennée (1):
36
aspeed: Implement write-1-{set, clear} for AST2500 strapping
36
docs: add some notes on the sbsa-ref machine
37
37
38
Guenter Roeck (1):
38
AlexChen (1):
39
bcm2835_aux: Swap RX and TX interrupt assignments
39
ssi: Fix bad printf format specifiers
40
40
41
Peter Maydell (4):
41
Andrew Jones (1):
42
hw/intc/arm_gic: Check interrupt number in gic_deactivate_irq()
42
hw/arm/Kconfig: ARM_V7M depends on PTIMER
43
hw/intc/arm_gic: Fix handling of GICD_ITARGETSR
43
44
accel/tcg: Use correct test when looking in victim TLB for code
44
Havard Skinnemoen (1):
45
accel/tcg: Assert that tlb fill gave us a valid TLB entry
45
tests/qtest/npcm7xx_rng-test: count runs properly
46
47
Peter Maydell (2):
48
hw/arm/nseries: Check return value from load_image_targphys()
49
target/arm/translate-neon.c: Handle VTBL UNDEF case before VFP access check
50
51
Philippe Mathieu-Daudé (6):
52
hw/arm/virt: Remove dependency on Cortex-A15 MPCore peripherals
53
hw/arm/armsse: Correct expansion MPC interrupt lines
54
hw/misc/stm32f2xx_syscfg: Remove extraneous IRQ
55
hw/arm/nseries: Remove invalid/unnecessary n8x0_uart_setup()
56
hw/arm/musicpal: Don't connect two qemu_irqs directly to the same input
57
hw/arm/musicpal: Only use qdev_get_gpio_in() when necessary
46
58
47
Richard Henderson (1):
59
Richard Henderson (1):
48
target/arm: Fix LD1W and LDFF1W (scalar plus vector)
60
target/arm: Fix neon VTBL/VTBX for len > 1
49
61
50
Thomas Huth (1):
62
Xinhao Zhang (3):
51
hw/arm/bcm2836: Mark the bcm2836 / bcm2837 devices with user_creatable = false
63
target/arm: add spaces around operator
64
target/arm: Don't use '#' flag of printf format
65
target/arm: add space before the open parenthesis '('
52
66
53
include/hw/misc/aspeed_scu.h | 2 ++
67
docs/system/arm/sbsa.rst | 32 ++++++++++++++++++++++
54
accel/tcg/cputlb.c | 6 +++---
68
docs/system/target-arm.rst | 1 +
55
hw/arm/bcm2836.c | 2 ++
69
include/hw/misc/stm32f2xx_syscfg.h | 2 --
56
hw/char/bcm2835_aux.c | 4 ++--
70
target/arm/helper.h | 2 +-
57
hw/intc/arm_gic.c | 22 +++++++++++++++++++---
71
hw/arm/armsse.c | 3 +-
58
hw/misc/aspeed_scu.c | 19 +++++++++++++++++--
72
hw/arm/musicpal.c | 40 +++++++++++++++++----------
59
target/arm/sve_helper.c | 4 ++--
73
hw/arm/nseries.c | 26 ++++++++----------
60
7 files changed, 47 insertions(+), 12 deletions(-)
74
hw/arm/stm32f205_soc.c | 1 -
75
hw/misc/stm32f2xx_syscfg.c | 2 --
76
hw/ssi/imx_spi.c | 2 +-
77
hw/ssi/xilinx_spi.c | 2 +-
78
target/arm/arch_dump.c | 8 +++---
79
target/arm/arm-semi.c | 8 +++---
80
target/arm/helper.c | 2 +-
81
target/arm/op_helper.c | 23 +++++++++-------
82
target/arm/translate-a64.c | 4 +--
83
target/arm/translate.c | 2 +-
84
tests/qtest/npcm7xx_rng-test.c | 2 +-
85
hw/arm/Kconfig | 3 +-
86
target/arm/translate-neon.c.inc | 56 ++++++++++++++------------------------
87
20 files changed, 123 insertions(+), 98 deletions(-)
88
create mode 100644 docs/system/arm/sbsa.rst
61
89
diff view generated by jsdifflib
New patch
1
From: Andrew Jones <drjones@redhat.com>
1
2
3
commit 32bd322a0134 ("hw/timer/armv7m_systick: Rewrite to use ptimers")
4
changed armv7m_systick to build on ptimers. Make sure we have ptimers
5
in the build when building armv7m_systick.
6
7
Signed-off-by: Andrew Jones <drjones@redhat.com>
8
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
9
Message-id: 20201104103343.30392-1-drjones@redhat.com
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
11
---
12
hw/arm/Kconfig | 1 +
13
1 file changed, 1 insertion(+)
14
15
diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig
16
index XXXXXXX..XXXXXXX 100644
17
--- a/hw/arm/Kconfig
18
+++ b/hw/arm/Kconfig
19
@@ -XXX,XX +XXX,XX @@ config ZYNQ
20
21
config ARM_V7M
22
bool
23
+ select PTIMER
24
25
config ALLWINNER_A10
26
bool
27
--
28
2.20.1
29
30
diff view generated by jsdifflib
New patch
1
From: AlexChen <alex.chen@huawei.com>
1
2
3
We should use printf format specifier "%u" instead of "%d" for
4
argument of type "unsigned int".
5
6
Reported-by: Euler Robot <euler.robot@huawei.com>
7
Signed-off-by: Alex Chen <alex.chen@huawei.com>
8
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
9
Message-id: 5FA280F5.8060902@huawei.com
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
11
---
12
hw/ssi/imx_spi.c | 2 +-
13
hw/ssi/xilinx_spi.c | 2 +-
14
2 files changed, 2 insertions(+), 2 deletions(-)
15
16
diff --git a/hw/ssi/imx_spi.c b/hw/ssi/imx_spi.c
17
index XXXXXXX..XXXXXXX 100644
18
--- a/hw/ssi/imx_spi.c
19
+++ b/hw/ssi/imx_spi.c
20
@@ -XXX,XX +XXX,XX @@ static const char *imx_spi_reg_name(uint32_t reg)
21
case ECSPI_MSGDATA:
22
return "ECSPI_MSGDATA";
23
default:
24
- sprintf(unknown, "%d ?", reg);
25
+ sprintf(unknown, "%u ?", reg);
26
return unknown;
27
}
28
}
29
diff --git a/hw/ssi/xilinx_spi.c b/hw/ssi/xilinx_spi.c
30
index XXXXXXX..XXXXXXX 100644
31
--- a/hw/ssi/xilinx_spi.c
32
+++ b/hw/ssi/xilinx_spi.c
33
@@ -XXX,XX +XXX,XX @@ static void xlx_spi_update_irq(XilinxSPI *s)
34
irq chain unless things really changed. */
35
if (pending != s->irqline) {
36
s->irqline = pending;
37
- DB_PRINT("irq_change of state %d ISR:%x IER:%X\n",
38
+ DB_PRINT("irq_change of state %u ISR:%x IER:%X\n",
39
pending, s->regs[R_IPISR], s->regs[R_IPIER]);
40
qemu_set_irq(s->irq, pending);
41
}
42
--
43
2.20.1
44
45
diff view generated by jsdifflib
New patch
1
From: Xinhao Zhang <zhangxinhao1@huawei.com>
1
2
3
Fix code style. Operator needs spaces both sides.
4
5
Signed-off-by: Xinhao Zhang <zhangxinhao1@huawei.com>
6
Signed-off-by: Kai Deng <dengkai1@huawei.com>
7
Message-id: 20201103114529.638233-1-zhangxinhao1@huawei.com
8
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
9
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
10
---
11
target/arm/arch_dump.c | 8 ++++----
12
target/arm/arm-semi.c | 8 ++++----
13
target/arm/helper.c | 2 +-
14
3 files changed, 9 insertions(+), 9 deletions(-)
15
16
diff --git a/target/arm/arch_dump.c b/target/arm/arch_dump.c
17
index XXXXXXX..XXXXXXX 100644
18
--- a/target/arm/arch_dump.c
19
+++ b/target/arm/arch_dump.c
20
@@ -XXX,XX +XXX,XX @@ static int aarch64_write_elf64_prfpreg(WriteCoreDumpFunction f,
21
22
for (i = 0; i < 32; ++i) {
23
uint64_t *q = aa64_vfp_qreg(env, i);
24
- note.vfp.vregs[2*i + 0] = cpu_to_dump64(s, q[0]);
25
- note.vfp.vregs[2*i + 1] = cpu_to_dump64(s, q[1]);
26
+ note.vfp.vregs[2 * i + 0] = cpu_to_dump64(s, q[0]);
27
+ note.vfp.vregs[2 * i + 1] = cpu_to_dump64(s, q[1]);
28
}
29
30
if (s->dump_info.d_endian == ELFDATA2MSB) {
31
@@ -XXX,XX +XXX,XX @@ static int aarch64_write_elf64_prfpreg(WriteCoreDumpFunction f,
32
*/
33
for (i = 0; i < 32; ++i) {
34
uint64_t tmp = note.vfp.vregs[2*i];
35
- note.vfp.vregs[2*i] = note.vfp.vregs[2*i+1];
36
- note.vfp.vregs[2*i+1] = tmp;
37
+ note.vfp.vregs[2 * i] = note.vfp.vregs[2 * i + 1];
38
+ note.vfp.vregs[2 * i + 1] = tmp;
39
}
40
}
41
42
diff --git a/target/arm/arm-semi.c b/target/arm/arm-semi.c
43
index XXXXXXX..XXXXXXX 100644
44
--- a/target/arm/arm-semi.c
45
+++ b/target/arm/arm-semi.c
46
@@ -XXX,XX +XXX,XX @@ target_ulong do_arm_semihosting(CPUARMState *env)
47
if (use_gdb_syscalls()) {
48
arm_semi_open_guestfd = guestfd;
49
ret = arm_gdb_syscall(cpu, arm_semi_open_cb, "open,%s,%x,1a4", arg0,
50
- (int)arg2+1, gdb_open_modeflags[arg1]);
51
+ (int)arg2 + 1, gdb_open_modeflags[arg1]);
52
} else {
53
ret = set_swi_errno(env, open(s, open_modeflags[arg1], 0644));
54
if (ret == (uint32_t)-1) {
55
@@ -XXX,XX +XXX,XX @@ target_ulong do_arm_semihosting(CPUARMState *env)
56
GET_ARG(1);
57
if (use_gdb_syscalls()) {
58
ret = arm_gdb_syscall(cpu, arm_semi_cb, "unlink,%s",
59
- arg0, (int)arg1+1);
60
+ arg0, (int)arg1 + 1);
61
} else {
62
s = lock_user_string(arg0);
63
if (!s) {
64
@@ -XXX,XX +XXX,XX @@ target_ulong do_arm_semihosting(CPUARMState *env)
65
GET_ARG(3);
66
if (use_gdb_syscalls()) {
67
return arm_gdb_syscall(cpu, arm_semi_cb, "rename,%s,%s",
68
- arg0, (int)arg1+1, arg2, (int)arg3+1);
69
+ arg0, (int)arg1 + 1, arg2, (int)arg3 + 1);
70
} else {
71
char *s2;
72
s = lock_user_string(arg0);
73
@@ -XXX,XX +XXX,XX @@ target_ulong do_arm_semihosting(CPUARMState *env)
74
GET_ARG(1);
75
if (use_gdb_syscalls()) {
76
return arm_gdb_syscall(cpu, arm_semi_cb, "system,%s",
77
- arg0, (int)arg1+1);
78
+ arg0, (int)arg1 + 1);
79
} else {
80
s = lock_user_string(arg0);
81
if (!s) {
82
diff --git a/target/arm/helper.c b/target/arm/helper.c
83
index XXXXXXX..XXXXXXX 100644
84
--- a/target/arm/helper.c
85
+++ b/target/arm/helper.c
86
@@ -XXX,XX +XXX,XX @@ uint32_t HELPER(usad8)(uint32_t a, uint32_t b)
87
uint32_t sum;
88
sum = do_usad(a, b);
89
sum += do_usad(a >> 8, b >> 8);
90
- sum += do_usad(a >> 16, b >>16);
91
+ sum += do_usad(a >> 16, b >> 16);
92
sum += do_usad(a >> 24, b >> 24);
93
return sum;
94
}
95
--
96
2.20.1
97
98
diff view generated by jsdifflib
1
In commit 4b1a3e1e34ad97 we added a check for whether the TLB entry
1
From: Xinhao Zhang <zhangxinhao1@huawei.com>
2
we had following a tlb_fill had the INVALID bit set. This could
3
happen in some circumstances because a stale or wrong TLB entry was
4
pulled out of the victim cache. However, after commit
5
68fea038553039e (which prevents stale entries being in the victim
6
cache) and the previous commit (which ensures we don't incorrectly
7
hit in the victim cache)) this should never be possible.
8
2
9
Drop the check on TLB_INVALID_MASK from the "is this a TLB_RECHECK?"
3
Fix code style. Don't use '#' flag of printf format ('%#') in
10
condition, and instead assert that the tlb fill procedure has given
4
format strings, use '0x' prefix instead
11
us a valid TLB entry (or longjumped out with a guest exception).
12
5
6
Signed-off-by: Xinhao Zhang <zhangxinhao1@huawei.com>
7
Signed-off-by: Kai Deng <dengkai1@huawei.com>
8
Message-id: 20201103114529.638233-2-zhangxinhao1@huawei.com
9
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
13
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
14
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
15
Message-id: 20180713141636.18665-3-peter.maydell@linaro.org
16
---
11
---
17
accel/tcg/cputlb.c | 4 ++--
12
target/arm/translate-a64.c | 4 ++--
18
1 file changed, 2 insertions(+), 2 deletions(-)
13
1 file changed, 2 insertions(+), 2 deletions(-)
19
14
20
diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c
15
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
21
index XXXXXXX..XXXXXXX 100644
16
index XXXXXXX..XXXXXXX 100644
22
--- a/accel/tcg/cputlb.c
17
--- a/target/arm/translate-a64.c
23
+++ b/accel/tcg/cputlb.c
18
+++ b/target/arm/translate-a64.c
24
@@ -XXX,XX +XXX,XX @@ tb_page_addr_t get_page_addr_code(CPUArchState *env, target_ulong addr)
19
@@ -XXX,XX +XXX,XX @@ static void disas_simd_three_reg_same_fp16(DisasContext *s, uint32_t insn)
25
if (!VICTIM_TLB_HIT(addr_code, addr)) {
20
gen_helper_advsimd_acgt_f16(tcg_res, tcg_op1, tcg_op2, fpst);
26
tlb_fill(ENV_GET_CPU(env), addr, 0, MMU_INST_FETCH, mmu_idx, 0);
21
break;
27
}
22
default:
28
+ assert(tlb_hit(env->tlb_table[mmu_idx][index].addr_code, addr));
23
- fprintf(stderr, "%s: insn %#04x, fpop %#2x @ %#" PRIx64 "\n",
24
+ fprintf(stderr, "%s: insn 0x%04x, fpop 0x%2x @ 0x%" PRIx64 "\n",
25
__func__, insn, fpopcode, s->pc_curr);
26
g_assert_not_reached();
27
}
28
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc_fp16(DisasContext *s, uint32_t insn)
29
case 0x7f: /* FSQRT (vector) */
30
break;
31
default:
32
- fprintf(stderr, "%s: insn %#04x fpop %#2x\n", __func__, insn, fpop);
33
+ fprintf(stderr, "%s: insn 0x%04x fpop 0x%2x\n", __func__, insn, fpop);
34
g_assert_not_reached();
29
}
35
}
30
36
31
- if (unlikely((env->tlb_table[mmu_idx][index].addr_code &
32
- (TLB_RECHECK | TLB_INVALID_MASK)) == TLB_RECHECK)) {
33
+ if (unlikely(env->tlb_table[mmu_idx][index].addr_code & TLB_RECHECK)) {
34
/*
35
* This is a TLB_RECHECK access, where the MMU protection
36
* covers a smaller range than a target page, and we must
37
--
37
--
38
2.17.1
38
2.20.1
39
39
40
40
diff view generated by jsdifflib
New patch
1
From: Xinhao Zhang <zhangxinhao1@huawei.com>
1
2
3
Fix code style. Space required before the open parenthesis '('.
4
5
Signed-off-by: Xinhao Zhang <zhangxinhao1@huawei.com>
6
Signed-off-by: Kai Deng <dengkai1@huawei.com>
7
Message-id: 20201103114529.638233-3-zhangxinhao1@huawei.com
8
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
9
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
10
---
11
target/arm/translate.c | 2 +-
12
1 file changed, 1 insertion(+), 1 deletion(-)
13
14
diff --git a/target/arm/translate.c b/target/arm/translate.c
15
index XXXXXXX..XXXXXXX 100644
16
--- a/target/arm/translate.c
17
+++ b/target/arm/translate.c
18
@@ -XXX,XX +XXX,XX @@ static void arm_tr_tb_stop(DisasContextBase *dcbase, CPUState *cpu)
19
- Hardware watchpoints.
20
Hardware breakpoints have already been handled and skip this code.
21
*/
22
- switch(dc->base.is_jmp) {
23
+ switch (dc->base.is_jmp) {
24
case DISAS_NEXT:
25
case DISAS_TOO_MANY:
26
gen_goto_tb(dc, 1, dc->base.pc_next);
27
--
28
2.20.1
29
30
diff view generated by jsdifflib
New patch
1
From: Alex Bennée <alex.bennee@linaro.org>
1
2
3
We should at least document what this machine is about.
4
5
Reviewed-by: Graeme Gregory <graeme@nuviainc.com>
6
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
7
Message-id: 20201104165254.24822-1-alex.bennee@linaro.org
8
Cc: Leif Lindholm <leif@nuviainc.com>
9
Cc: Shashi Mallela <shashi.mallela@linaro.org>
10
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
11
[PMM: fixed filename mismatch]
12
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
13
---
14
docs/system/arm/sbsa.rst | 32 ++++++++++++++++++++++++++++++++
15
docs/system/target-arm.rst | 1 +
16
2 files changed, 33 insertions(+)
17
create mode 100644 docs/system/arm/sbsa.rst
18
19
diff --git a/docs/system/arm/sbsa.rst b/docs/system/arm/sbsa.rst
20
new file mode 100644
21
index XXXXXXX..XXXXXXX
22
--- /dev/null
23
+++ b/docs/system/arm/sbsa.rst
24
@@ -XXX,XX +XXX,XX @@
25
+Arm Server Base System Architecture Reference board (``sbsa-ref``)
26
+==================================================================
27
+
28
+While the `virt` board is a generic board platform that doesn't match
29
+any real hardware the `sbsa-ref` board intends to look like real
30
+hardware. The `Server Base System Architecture
31
+<https://developer.arm.com/documentation/den0029/latest>` defines a
32
+minimum base line of hardware support and importantly how the firmware
33
+reports that to any operating system. It is a static system that
34
+reports a very minimal DT to the firmware for non-discoverable
35
+information about components affected by the qemu command line (i.e.
36
+cpus and memory). As a result it must have a firmware specifically
37
+built to expect a certain hardware layout (as you would in a real
38
+machine).
39
+
40
+It is intended to be a machine for developing firmware and testing
41
+standards compliance with operating systems.
42
+
43
+Supported devices
44
+"""""""""""""""""
45
+
46
+The sbsa-ref board supports:
47
+
48
+ - A configurable number of AArch64 CPUs
49
+ - GIC version 3
50
+ - System bus AHCI controller
51
+ - System bus EHCI controller
52
+ - CDROM and hard disc on AHCI bus
53
+ - E1000E ethernet card on PCIe bus
54
+ - VGA display adaptor on PCIe bus
55
+ - A generic SBSA watchdog device
56
+
57
diff --git a/docs/system/target-arm.rst b/docs/system/target-arm.rst
58
index XXXXXXX..XXXXXXX 100644
59
--- a/docs/system/target-arm.rst
60
+++ b/docs/system/target-arm.rst
61
@@ -XXX,XX +XXX,XX @@ undocumented; you can get a complete list by running
62
arm/mps2
63
arm/musca
64
arm/realview
65
+ arm/sbsa
66
arm/versatile
67
arm/vexpress
68
arm/aspeed
69
--
70
2.20.1
71
72
diff view generated by jsdifflib
New patch
1
From: Philippe Mathieu-Daudé <philmd@redhat.com>
1
2
3
When using a Cortex-A15, the Virt machine does not use any
4
MPCore peripherals. Remove the dependency.
5
6
Fixes: 7951c7b7c05 ("hw/arm: Express dependencies of the virt machine with Kconfig")
7
Reported-by: Miroslav Rezanina <mrezanin@redhat.com>
8
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
9
Message-id: 20201107114852.271922-1-philmd@redhat.com
10
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
11
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
12
---
13
hw/arm/Kconfig | 1 -
14
1 file changed, 1 deletion(-)
15
16
diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig
17
index XXXXXXX..XXXXXXX 100644
18
--- a/hw/arm/Kconfig
19
+++ b/hw/arm/Kconfig
20
@@ -XXX,XX +XXX,XX @@ config ARM_VIRT
21
imply VFIO_PLATFORM
22
imply VFIO_XGMAC
23
imply TPM_TIS_SYSBUS
24
- select A15MPCORE
25
select ACPI
26
select ARM_SMMUV3
27
select GPIO_KEY
28
--
29
2.20.1
30
31
diff view generated by jsdifflib
1
From: Richard Henderson <richard.henderson@linaro.org>
1
From: Richard Henderson <richard.henderson@linaro.org>
2
2
3
'I' was being double-incremented; correctly within the inner loop
3
The helper function did not get updated when we reorganized
4
and incorrectly within the outer loop.
4
the vector register file for SVE. Since then, the neon dregs
5
are non-sequential and cannot be simply indexed.
5
6
7
At the same time, make the helper function operate on 64-bit
8
quantities so that we do not have to call it twice.
9
10
Fixes: c39c2b9043e
11
Reported-by: Ard Biesheuvel <ardb@kernel.org>
6
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
12
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
7
Reviewed-by: Laurent Desnogues <laurent.desnogues@gmail.com>
13
[PMM: use aa32_vfp_dreg() rather than opencoding]
8
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
14
Message-id: 20201105171126.88014-1-richard.henderson@linaro.org
9
Tested-by: Alex Bennée <alex.bennee@linaro.org>
15
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
10
Message-id: 20180711103957.3040-1-richard.henderson@linaro.org
11
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
16
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
12
---
17
---
13
target/arm/sve_helper.c | 4 ++--
18
target/arm/helper.h | 2 +-
14
1 file changed, 2 insertions(+), 2 deletions(-)
19
target/arm/op_helper.c | 23 +++++++++--------
20
target/arm/translate-neon.c.inc | 44 +++++++++++----------------------
21
3 files changed, 29 insertions(+), 40 deletions(-)
15
22
16
diff --git a/target/arm/sve_helper.c b/target/arm/sve_helper.c
23
diff --git a/target/arm/helper.h b/target/arm/helper.h
17
index XXXXXXX..XXXXXXX 100644
24
index XXXXXXX..XXXXXXX 100644
18
--- a/target/arm/sve_helper.c
25
--- a/target/arm/helper.h
19
+++ b/target/arm/sve_helper.c
26
+++ b/target/arm/helper.h
20
@@ -XXX,XX +XXX,XX @@ void HELPER(NAME)(CPUARMState *env, void *vd, void *vg, void *vm, \
27
@@ -XXX,XX +XXX,XX @@ DEF_HELPER_FLAGS_2(rsqrte_f32, TCG_CALL_NO_RWG, f32, f32, ptr)
21
intptr_t i, oprsz = simd_oprsz(desc); \
28
DEF_HELPER_FLAGS_2(rsqrte_f64, TCG_CALL_NO_RWG, f64, f64, ptr)
22
unsigned scale = simd_data(desc); \
29
DEF_HELPER_FLAGS_1(recpe_u32, TCG_CALL_NO_RWG, i32, i32)
23
uintptr_t ra = GETPC(); \
30
DEF_HELPER_FLAGS_1(rsqrte_u32, TCG_CALL_NO_RWG, i32, i32)
24
- for (i = 0; i < oprsz; i++) { \
31
-DEF_HELPER_FLAGS_4(neon_tbl, TCG_CALL_NO_RWG, i32, i32, i32, ptr, i32)
25
+ for (i = 0; i < oprsz; ) { \
32
+DEF_HELPER_FLAGS_4(neon_tbl, TCG_CALL_NO_RWG, i64, env, i32, i64, i64)
26
uint16_t pg = *(uint16_t *)(vg + H1_2(i >> 3)); \
33
27
do { \
34
DEF_HELPER_3(shl_cc, i32, env, i32, i32)
28
TYPEM m = 0; \
35
DEF_HELPER_3(shr_cc, i32, env, i32, i32)
29
@@ -XXX,XX +XXX,XX @@ void HELPER(NAME)(CPUARMState *env, void *vd, void *vg, void *vm, \
36
diff --git a/target/arm/op_helper.c b/target/arm/op_helper.c
30
uintptr_t ra = GETPC(); \
37
index XXXXXXX..XXXXXXX 100644
31
bool first = true; \
38
--- a/target/arm/op_helper.c
32
mmap_lock(); \
39
+++ b/target/arm/op_helper.c
33
- for (i = 0; i < oprsz; i++) { \
40
@@ -XXX,XX +XXX,XX @@ void raise_exception_ra(CPUARMState *env, uint32_t excp, uint32_t syndrome,
34
+ for (i = 0; i < oprsz; ) { \
41
cpu_loop_exit_restore(cs, ra);
35
uint16_t pg = *(uint16_t *)(vg + H1_2(i >> 3)); \
42
}
36
do { \
43
37
TYPEM m = 0; \
44
-uint32_t HELPER(neon_tbl)(uint32_t ireg, uint32_t def, void *vn,
45
- uint32_t maxindex)
46
+uint64_t HELPER(neon_tbl)(CPUARMState *env, uint32_t desc,
47
+ uint64_t ireg, uint64_t def)
48
{
49
- uint32_t val, shift;
50
- uint64_t *table = vn;
51
+ uint64_t tmp, val = 0;
52
+ uint32_t maxindex = ((desc & 3) + 1) * 8;
53
+ uint32_t base_reg = desc >> 2;
54
+ uint32_t shift, index, reg;
55
56
- val = 0;
57
- for (shift = 0; shift < 32; shift += 8) {
58
- uint32_t index = (ireg >> shift) & 0xff;
59
+ for (shift = 0; shift < 64; shift += 8) {
60
+ index = (ireg >> shift) & 0xff;
61
if (index < maxindex) {
62
- uint32_t tmp = (table[index >> 3] >> ((index & 7) << 3)) & 0xff;
63
- val |= tmp << shift;
64
+ reg = base_reg + (index >> 3);
65
+ tmp = *aa32_vfp_dreg(env, reg);
66
+ tmp = ((tmp >> ((index & 7) << 3)) & 0xff) << shift;
67
} else {
68
- val |= def & (0xff << shift);
69
+ tmp = def & (0xffull << shift);
70
}
71
+ val |= tmp;
72
}
73
return val;
74
}
75
diff --git a/target/arm/translate-neon.c.inc b/target/arm/translate-neon.c.inc
76
index XXXXXXX..XXXXXXX 100644
77
--- a/target/arm/translate-neon.c.inc
78
+++ b/target/arm/translate-neon.c.inc
79
@@ -XXX,XX +XXX,XX @@ static bool trans_VEXT(DisasContext *s, arg_VEXT *a)
80
81
static bool trans_VTBL(DisasContext *s, arg_VTBL *a)
82
{
83
- int n;
84
- TCGv_i32 tmp, tmp2, tmp3, tmp4;
85
- TCGv_ptr ptr1;
86
+ TCGv_i64 val, def;
87
+ TCGv_i32 desc;
88
89
if (!arm_dc_feature(s, ARM_FEATURE_NEON)) {
90
return false;
91
@@ -XXX,XX +XXX,XX @@ static bool trans_VTBL(DisasContext *s, arg_VTBL *a)
92
return true;
93
}
94
95
- n = a->len + 1;
96
- if ((a->vn + n) > 32) {
97
+ if ((a->vn + a->len + 1) > 32) {
98
/*
99
* This is UNPREDICTABLE; we choose to UNDEF to avoid the
100
* helper function running off the end of the register file.
101
*/
102
return false;
103
}
104
- n <<= 3;
105
- tmp = tcg_temp_new_i32();
106
- if (a->op) {
107
- read_neon_element32(tmp, a->vd, 0, MO_32);
108
- } else {
109
- tcg_gen_movi_i32(tmp, 0);
110
- }
111
- tmp2 = tcg_temp_new_i32();
112
- read_neon_element32(tmp2, a->vm, 0, MO_32);
113
- ptr1 = vfp_reg_ptr(true, a->vn);
114
- tmp4 = tcg_const_i32(n);
115
- gen_helper_neon_tbl(tmp2, tmp2, tmp, ptr1, tmp4);
116
117
+ desc = tcg_const_i32((a->vn << 2) | a->len);
118
+ def = tcg_temp_new_i64();
119
if (a->op) {
120
- read_neon_element32(tmp, a->vd, 1, MO_32);
121
+ read_neon_element64(def, a->vd, 0, MO_64);
122
} else {
123
- tcg_gen_movi_i32(tmp, 0);
124
+ tcg_gen_movi_i64(def, 0);
125
}
126
- tmp3 = tcg_temp_new_i32();
127
- read_neon_element32(tmp3, a->vm, 1, MO_32);
128
- gen_helper_neon_tbl(tmp3, tmp3, tmp, ptr1, tmp4);
129
- tcg_temp_free_i32(tmp);
130
- tcg_temp_free_i32(tmp4);
131
- tcg_temp_free_ptr(ptr1);
132
+ val = tcg_temp_new_i64();
133
+ read_neon_element64(val, a->vm, 0, MO_64);
134
135
- write_neon_element32(tmp2, a->vd, 0, MO_32);
136
- write_neon_element32(tmp3, a->vd, 1, MO_32);
137
- tcg_temp_free_i32(tmp2);
138
- tcg_temp_free_i32(tmp3);
139
+ gen_helper_neon_tbl(val, cpu_env, desc, val, def);
140
+ write_neon_element64(val, a->vd, 0, MO_64);
141
+
142
+ tcg_temp_free_i64(def);
143
+ tcg_temp_free_i64(val);
144
+ tcg_temp_free_i32(desc);
145
return true;
146
}
147
38
--
148
--
39
2.17.1
149
2.20.1
40
150
41
151
diff view generated by jsdifflib
New patch
1
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
1
2
3
We can use one MPC per SRAM bank, but we currently only wire the
4
IRQ from the first expansion MPC to the IRQ splitter. Fix that.
5
6
Fixes: bb75e16d5e6 ("hw/arm/iotkit: Wire up MPC interrupt lines")
7
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
8
Message-id: 20201107193403.436146-2-f4bug@amsat.org
9
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
11
---
12
hw/arm/armsse.c | 3 ++-
13
1 file changed, 2 insertions(+), 1 deletion(-)
14
15
diff --git a/hw/arm/armsse.c b/hw/arm/armsse.c
16
index XXXXXXX..XXXXXXX 100644
17
--- a/hw/arm/armsse.c
18
+++ b/hw/arm/armsse.c
19
@@ -XXX,XX +XXX,XX @@ static void armsse_realize(DeviceState *dev, Error **errp)
20
qdev_get_gpio_in(dev_splitter, 0));
21
qdev_connect_gpio_out(dev_splitter, 0,
22
qdev_get_gpio_in_named(dev_secctl,
23
- "mpc_status", 0));
24
+ "mpc_status",
25
+ i - IOTS_NUM_EXP_MPC));
26
}
27
28
qdev_connect_gpio_out(dev_splitter, 1,
29
--
30
2.20.1
31
32
diff view generated by jsdifflib
New patch
1
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
1
2
3
The system configuration controller (SYSCFG) doesn't have
4
any output IRQ (and the INTC input #71 belongs to the UART6).
5
Remove the invalid code.
6
7
Fixes: db635521a02 ("stm32f205: Add the stm32f205 SoC")
8
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
9
Message-id: 20201107193403.436146-3-f4bug@amsat.org
10
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
11
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
12
---
13
include/hw/misc/stm32f2xx_syscfg.h | 2 --
14
hw/arm/stm32f205_soc.c | 1 -
15
hw/misc/stm32f2xx_syscfg.c | 2 --
16
3 files changed, 5 deletions(-)
17
18
diff --git a/include/hw/misc/stm32f2xx_syscfg.h b/include/hw/misc/stm32f2xx_syscfg.h
19
index XXXXXXX..XXXXXXX 100644
20
--- a/include/hw/misc/stm32f2xx_syscfg.h
21
+++ b/include/hw/misc/stm32f2xx_syscfg.h
22
@@ -XXX,XX +XXX,XX @@ struct STM32F2XXSyscfgState {
23
uint32_t syscfg_exticr3;
24
uint32_t syscfg_exticr4;
25
uint32_t syscfg_cmpcr;
26
-
27
- qemu_irq irq;
28
};
29
30
#endif /* HW_STM32F2XX_SYSCFG_H */
31
diff --git a/hw/arm/stm32f205_soc.c b/hw/arm/stm32f205_soc.c
32
index XXXXXXX..XXXXXXX 100644
33
--- a/hw/arm/stm32f205_soc.c
34
+++ b/hw/arm/stm32f205_soc.c
35
@@ -XXX,XX +XXX,XX @@ static void stm32f205_soc_realize(DeviceState *dev_soc, Error **errp)
36
}
37
busdev = SYS_BUS_DEVICE(dev);
38
sysbus_mmio_map(busdev, 0, 0x40013800);
39
- sysbus_connect_irq(busdev, 0, qdev_get_gpio_in(armv7m, 71));
40
41
/* Attach UART (uses USART registers) and USART controllers */
42
for (i = 0; i < STM_NUM_USARTS; i++) {
43
diff --git a/hw/misc/stm32f2xx_syscfg.c b/hw/misc/stm32f2xx_syscfg.c
44
index XXXXXXX..XXXXXXX 100644
45
--- a/hw/misc/stm32f2xx_syscfg.c
46
+++ b/hw/misc/stm32f2xx_syscfg.c
47
@@ -XXX,XX +XXX,XX @@ static void stm32f2xx_syscfg_init(Object *obj)
48
{
49
STM32F2XXSyscfgState *s = STM32F2XX_SYSCFG(obj);
50
51
- sysbus_init_irq(SYS_BUS_DEVICE(obj), &s->irq);
52
-
53
memory_region_init_io(&s->mmio, obj, &stm32f2xx_syscfg_ops, s,
54
TYPE_STM32F2XX_SYSCFG, 0x400);
55
sysbus_init_mmio(SYS_BUS_DEVICE(obj), &s->mmio);
56
--
57
2.20.1
58
59
diff view generated by jsdifflib
1
From: Thomas Huth <thuth@redhat.com>
1
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
2
2
3
These devices are currently causing some problems when a user is trying
3
omap2420_mpu_init() introduced in commit 827df9f3c5f ("Add basic
4
to hot-plug or introspect them during runtime. Since these devices can
4
OMAP2 chip support") takes care of creating the 3 UARTs.
5
not be instantiated by the user at all (they need to be wired up in code
6
instead), we should mark them with user_creatable = false anyway, then we
7
avoid at least the crashes with the hot-plugging. The introspection problem
8
will be handled by a separate patch.
9
5
10
Signed-off-by: Thomas Huth <thuth@redhat.com>
6
Then commit 58a26b477e9 ("Emulate a serial bluetooth HCI with H4+
11
Message-id: 1531415537-26037-1-git-send-email-thuth@redhat.com
7
extensions and attach to n8x0's UART") added n8x0_uart_setup()
8
which create the UART and connects it to an IRQ output,
9
overwritting the existing peripheral and its IRQ connection.
10
This is incorrect.
11
12
Fortunately we don't need to fix this, because commit 6da68df7f9b
13
("hw/arm/nseries: Replace the bluetooth chardev with a "null"
14
chardev") removed the use of this peripheral. We can simply
15
remove the code.
16
17
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
18
Message-id: 20201107193403.436146-4-f4bug@amsat.org
12
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
19
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
13
Reviewed-by: Markus Armbruster <armbru@redhat.com>
14
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
20
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
15
---
21
---
16
hw/arm/bcm2836.c | 2 ++
22
hw/arm/nseries.c | 11 -----------
17
1 file changed, 2 insertions(+)
23
1 file changed, 11 deletions(-)
18
24
19
diff --git a/hw/arm/bcm2836.c b/hw/arm/bcm2836.c
25
diff --git a/hw/arm/nseries.c b/hw/arm/nseries.c
20
index XXXXXXX..XXXXXXX 100644
26
index XXXXXXX..XXXXXXX 100644
21
--- a/hw/arm/bcm2836.c
27
--- a/hw/arm/nseries.c
22
+++ b/hw/arm/bcm2836.c
28
+++ b/hw/arm/nseries.c
23
@@ -XXX,XX +XXX,XX @@ static void bcm283x_class_init(ObjectClass *oc, void *data)
29
@@ -XXX,XX +XXX,XX @@ static void n8x0_cbus_setup(struct n800_s *s)
24
bc->info = data;
30
cbus_attach(cbus, s->tahvo = tahvo_init(tahvo_irq, 1));
25
dc->realize = bcm2836_realize;
26
dc->props = bcm2836_props;
27
+ /* Reason: Must be wired up in code (see raspi_init() function) */
28
+ dc->user_creatable = false;
29
}
31
}
30
32
31
static const TypeInfo bcm283x_type_info = {
33
-static void n8x0_uart_setup(struct n800_s *s)
34
-{
35
- Chardev *radio = qemu_chr_new("bt-dummy-uart", "null", NULL);
36
- /*
37
- * Note: We used to connect N8X0_BT_RESET_GPIO and N8X0_BT_WKUP_GPIO
38
- * here, but this code has been removed with the bluetooth backend.
39
- */
40
- omap_uart_attach(s->mpu->uart[BT_UART], radio);
41
-}
42
-
43
static void n8x0_usb_setup(struct n800_s *s)
44
{
45
SysBusDevice *dev;
46
@@ -XXX,XX +XXX,XX @@ static void n8x0_init(MachineState *machine,
47
n8x0_spi_setup(s);
48
n8x0_dss_setup(s);
49
n8x0_cbus_setup(s);
50
- n8x0_uart_setup(s);
51
if (machine_usb(machine)) {
52
n8x0_usb_setup(s);
53
}
32
--
54
--
33
2.17.1
55
2.20.1
34
56
35
57
diff view generated by jsdifflib
1
From: Guenter Roeck <linux@roeck-us.net>
1
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
2
2
3
RX and TX interrupt bits were reversed, resulting in an endless sequence
3
The MusicPal board code connects both of the IRQ outputs of the UART
4
of serial interupts in the emulated system and the following repeated
4
to the same INTC qemu_irq. Connecting two qemu_irqs outputs directly
5
error message when booting Linux.
5
to the same input is not valid as it produces subtly wrong behaviour
6
(for instance if both the IRQ lines are high, and then one goes
7
low, the INTC input will see this as a high-to-low transition
8
even though the second IRQ line should still be holding it high).
6
9
7
serial8250: too much work for irq61
10
This kind of wiring needs an explicitly created OR gate; add one.
8
11
9
This results in a boot failure most of the time.
12
Inspired-by: Peter Maydell <peter.maydell@linaro.org>
10
13
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
11
Qemu command line used to reproduce the problem:
14
Message-id: 20201107193403.436146-5-f4bug@amsat.org
12
13
    qemu-system-aarch64 -M raspi3 -m 1024 \
14
    -kernel arch/arm64/boot/Image \
15
    --append "rdinit=/sbin/init console=ttyS1,115200"
16
    -initrd rootfs.cpio \
17
    -dtb arch/arm64/boot/dts/broadcom/bcm2837-rpi-3-b.dtb \
18
    -nographic -monitor null -serial null -serial stdio
19
20
This is with arm64:defconfig. The root file system was generated using
21
buildroot.
22
23
NB that this error likely arises from an erratum in the
24
BCM2835 datasheet where the TX and RX bits were swapped
25
in the AU_MU_IER_REG description (but correct for IIR):
26
https://elinux.org/BCM2835_datasheet_errata#p12
27
28
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
29
Message-id: 1529355846-25102-1-git-send-email-linux@roeck-us.net
30
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
15
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
31
[PMM: added NB about datasheet]
32
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
16
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
33
---
17
---
34
hw/char/bcm2835_aux.c | 4 ++--
18
hw/arm/musicpal.c | 17 +++++++++++++----
35
1 file changed, 2 insertions(+), 2 deletions(-)
19
hw/arm/Kconfig | 1 +
20
2 files changed, 14 insertions(+), 4 deletions(-)
36
21
37
diff --git a/hw/char/bcm2835_aux.c b/hw/char/bcm2835_aux.c
22
diff --git a/hw/arm/musicpal.c b/hw/arm/musicpal.c
38
index XXXXXXX..XXXXXXX 100644
23
index XXXXXXX..XXXXXXX 100644
39
--- a/hw/char/bcm2835_aux.c
24
--- a/hw/arm/musicpal.c
40
+++ b/hw/char/bcm2835_aux.c
25
+++ b/hw/arm/musicpal.c
41
@@ -XXX,XX +XXX,XX @@
26
@@ -XXX,XX +XXX,XX @@
42
#define AUX_MU_BAUD_REG 0x68
27
#include "ui/console.h"
43
28
#include "hw/i2c/i2c.h"
44
/* bits in IER/IIR registers */
29
#include "hw/irq.h"
45
-#define TX_INT 0x1
30
+#include "hw/or-irq.h"
46
-#define RX_INT 0x2
31
#include "hw/audio/wm8750.h"
47
+#define RX_INT 0x1
32
#include "sysemu/block-backend.h"
48
+#define TX_INT 0x2
33
#include "sysemu/runstate.h"
49
34
@@ -XXX,XX +XXX,XX @@
50
static void bcm2835_aux_update(BCM2835AuxState *s)
35
#define MP_TIMER4_IRQ 7
51
{
36
#define MP_EHCI_IRQ 8
37
#define MP_ETH_IRQ 9
38
-#define MP_UART1_IRQ 11
39
-#define MP_UART2_IRQ 11
40
+#define MP_UART_SHARED_IRQ 11
41
#define MP_GPIO_IRQ 12
42
#define MP_RTC_IRQ 28
43
#define MP_AUDIO_IRQ 30
44
@@ -XXX,XX +XXX,XX @@ static void musicpal_init(MachineState *machine)
45
ARMCPU *cpu;
46
qemu_irq pic[32];
47
DeviceState *dev;
48
+ DeviceState *uart_orgate;
49
DeviceState *i2c_dev;
50
DeviceState *lcd_dev;
51
DeviceState *key_dev;
52
@@ -XXX,XX +XXX,XX @@ static void musicpal_init(MachineState *machine)
53
pic[MP_TIMER2_IRQ], pic[MP_TIMER3_IRQ],
54
pic[MP_TIMER4_IRQ], NULL);
55
56
- serial_mm_init(address_space_mem, MP_UART1_BASE, 2, pic[MP_UART1_IRQ],
57
+ /* Logically OR both UART IRQs together */
58
+ uart_orgate = DEVICE(object_new(TYPE_OR_IRQ));
59
+ object_property_set_int(OBJECT(uart_orgate), "num-lines", 2, &error_fatal);
60
+ qdev_realize_and_unref(uart_orgate, NULL, &error_fatal);
61
+ qdev_connect_gpio_out(DEVICE(uart_orgate), 0, pic[MP_UART_SHARED_IRQ]);
62
+
63
+ serial_mm_init(address_space_mem, MP_UART1_BASE, 2,
64
+ qdev_get_gpio_in(uart_orgate, 0),
65
1825000, serial_hd(0), DEVICE_NATIVE_ENDIAN);
66
- serial_mm_init(address_space_mem, MP_UART2_BASE, 2, pic[MP_UART2_IRQ],
67
+ serial_mm_init(address_space_mem, MP_UART2_BASE, 2,
68
+ qdev_get_gpio_in(uart_orgate, 1),
69
1825000, serial_hd(1), DEVICE_NATIVE_ENDIAN);
70
71
/* Register flash */
72
diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig
73
index XXXXXXX..XXXXXXX 100644
74
--- a/hw/arm/Kconfig
75
+++ b/hw/arm/Kconfig
76
@@ -XXX,XX +XXX,XX @@ config MUSCA
77
78
config MUSICPAL
79
bool
80
+ select OR_IRQ
81
select BITBANG_I2C
82
select MARVELL_88W8618
83
select PTIMER
52
--
84
--
53
2.17.1
85
2.20.1
54
86
55
87
diff view generated by jsdifflib
1
From: Andrew Jeffery <andrew@aj.id.au>
1
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
2
2
3
The AST2500 SoC family changes the runtime behaviour of the hardware
3
We don't need to fill the full pic[] array if we only use
4
strapping register (SCU70) to write-1-set/write-1-clear, with
4
few of the interrupt lines. Directly call qdev_get_gpio_in()
5
write-1-clear implemented on the "read-only" SoC revision register
5
when necessary.
6
(SCU7C). For the the AST2400, the hardware strapping is
7
runtime-configured with read-modify-write semantics.
8
6
9
Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
7
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
10
Reviewed-by: Joel Stanley <joel@jms.id.au>
8
Message-id: 20201107193403.436146-6-f4bug@amsat.org
11
Message-id: 20180709143524.17480-1-andrew@aj.id.au
9
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
12
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
13
---
11
---
14
include/hw/misc/aspeed_scu.h | 2 ++
12
hw/arm/musicpal.c | 25 +++++++++++++------------
15
hw/misc/aspeed_scu.c | 19 +++++++++++++++++--
13
1 file changed, 13 insertions(+), 12 deletions(-)
16
2 files changed, 19 insertions(+), 2 deletions(-)
17
14
18
diff --git a/include/hw/misc/aspeed_scu.h b/include/hw/misc/aspeed_scu.h
15
diff --git a/hw/arm/musicpal.c b/hw/arm/musicpal.c
19
index XXXXXXX..XXXXXXX 100644
16
index XXXXXXX..XXXXXXX 100644
20
--- a/include/hw/misc/aspeed_scu.h
17
--- a/hw/arm/musicpal.c
21
+++ b/include/hw/misc/aspeed_scu.h
18
+++ b/hw/arm/musicpal.c
22
@@ -XXX,XX +XXX,XX @@ typedef struct AspeedSCUState {
19
@@ -XXX,XX +XXX,XX @@ static struct arm_boot_info musicpal_binfo = {
23
#define AST2500_A0_SILICON_REV 0x04000303U
20
static void musicpal_init(MachineState *machine)
24
#define AST2500_A1_SILICON_REV 0x04010303U
21
{
25
22
ARMCPU *cpu;
26
+#define ASPEED_IS_AST2500(si_rev) ((((si_rev) >> 24) & 0xff) == 0x04)
23
- qemu_irq pic[32];
27
+
24
DeviceState *dev;
28
extern bool is_supported_silicon_rev(uint32_t silicon_rev);
25
+ DeviceState *pic;
29
26
DeviceState *uart_orgate;
30
#define ASPEED_SCU_PROT_KEY 0x1688A8A8
27
DeviceState *i2c_dev;
31
diff --git a/hw/misc/aspeed_scu.c b/hw/misc/aspeed_scu.c
28
DeviceState *lcd_dev;
32
index XXXXXXX..XXXXXXX 100644
29
@@ -XXX,XX +XXX,XX @@ static void musicpal_init(MachineState *machine)
33
--- a/hw/misc/aspeed_scu.c
30
&error_fatal);
34
+++ b/hw/misc/aspeed_scu.c
31
memory_region_add_subregion(address_space_mem, MP_SRAM_BASE, sram);
35
@@ -XXX,XX +XXX,XX @@ static void aspeed_scu_write(void *opaque, hwaddr offset, uint64_t data,
32
36
s->regs[reg] = data;
33
- dev = sysbus_create_simple(TYPE_MV88W8618_PIC, MP_PIC_BASE,
37
aspeed_scu_set_apb_freq(s);
34
+ pic = sysbus_create_simple(TYPE_MV88W8618_PIC, MP_PIC_BASE,
38
break;
35
qdev_get_gpio_in(DEVICE(cpu), ARM_CPU_IRQ));
39
-
36
- for (i = 0; i < 32; i++) {
40
+ case HW_STRAP1:
37
- pic[i] = qdev_get_gpio_in(dev, i);
41
+ if (ASPEED_IS_AST2500(s->regs[SILICON_REV])) {
38
- }
42
+ s->regs[HW_STRAP1] |= data;
39
- sysbus_create_varargs(TYPE_MV88W8618_PIT, MP_PIT_BASE, pic[MP_TIMER1_IRQ],
43
+ return;
40
- pic[MP_TIMER2_IRQ], pic[MP_TIMER3_IRQ],
44
+ }
41
- pic[MP_TIMER4_IRQ], NULL);
45
+ /* Jump to assignment below */
42
+ sysbus_create_varargs(TYPE_MV88W8618_PIT, MP_PIT_BASE,
46
+ break;
43
+ qdev_get_gpio_in(pic, MP_TIMER1_IRQ),
47
+ case SILICON_REV:
44
+ qdev_get_gpio_in(pic, MP_TIMER2_IRQ),
48
+ if (ASPEED_IS_AST2500(s->regs[SILICON_REV])) {
45
+ qdev_get_gpio_in(pic, MP_TIMER3_IRQ),
49
+ s->regs[HW_STRAP1] &= ~data;
46
+ qdev_get_gpio_in(pic, MP_TIMER4_IRQ), NULL);
50
+ } else {
47
51
+ qemu_log_mask(LOG_GUEST_ERROR,
48
/* Logically OR both UART IRQs together */
52
+ "%s: Write to read-only offset 0x%" HWADDR_PRIx "\n",
49
uart_orgate = DEVICE(object_new(TYPE_OR_IRQ));
53
+ __func__, offset);
50
object_property_set_int(OBJECT(uart_orgate), "num-lines", 2, &error_fatal);
54
+ }
51
qdev_realize_and_unref(uart_orgate, NULL, &error_fatal);
55
+ /* Avoid assignment below, we've handled everything */
52
- qdev_connect_gpio_out(DEVICE(uart_orgate), 0, pic[MP_UART_SHARED_IRQ]);
56
+ return;
53
+ qdev_connect_gpio_out(DEVICE(uart_orgate), 0,
57
case FREQ_CNTR_EVAL:
54
+ qdev_get_gpio_in(pic, MP_UART_SHARED_IRQ));
58
case VGA_SCRATCH1 ... VGA_SCRATCH8:
55
59
case RNG_DATA:
56
serial_mm_init(address_space_mem, MP_UART1_BASE, 2,
60
- case SILICON_REV:
57
qdev_get_gpio_in(uart_orgate, 0),
61
case FREE_CNTR4:
58
@@ -XXX,XX +XXX,XX @@ static void musicpal_init(MachineState *machine)
62
case FREE_CNTR4_EXT:
59
OBJECT(get_system_memory()), &error_fatal);
63
qemu_log_mask(LOG_GUEST_ERROR,
60
sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
61
sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, MP_ETH_BASE);
62
- sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, pic[MP_ETH_IRQ]);
63
+ sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0,
64
+ qdev_get_gpio_in(pic, MP_ETH_IRQ));
65
66
sysbus_create_simple("mv88w8618_wlan", MP_WLAN_BASE, NULL);
67
68
sysbus_create_simple(TYPE_MUSICPAL_MISC, MP_MISC_BASE, NULL);
69
70
dev = sysbus_create_simple(TYPE_MUSICPAL_GPIO, MP_GPIO_BASE,
71
- pic[MP_GPIO_IRQ]);
72
+ qdev_get_gpio_in(pic, MP_GPIO_IRQ));
73
i2c_dev = sysbus_create_simple("gpio_i2c", -1, NULL);
74
i2c = (I2CBus *)qdev_get_child_bus(i2c_dev, "i2c");
75
76
@@ -XXX,XX +XXX,XX @@ static void musicpal_init(MachineState *machine)
77
NULL);
78
sysbus_realize_and_unref(s, &error_fatal);
79
sysbus_mmio_map(s, 0, MP_AUDIO_BASE);
80
- sysbus_connect_irq(s, 0, pic[MP_AUDIO_IRQ]);
81
+ sysbus_connect_irq(s, 0, qdev_get_gpio_in(pic, MP_AUDIO_IRQ));
82
83
musicpal_binfo.ram_size = MP_RAM_DEFAULT_SIZE;
84
arm_load_kernel(cpu, machine, &musicpal_binfo);
64
--
85
--
65
2.17.1
86
2.20.1
66
87
67
88
diff view generated by jsdifflib
1
The GICD_ITARGETSR implementation still has some 11MPCore behaviour
1
The nseries machines have a codepath that allows them to load a
2
that we were incorrectly using in our GICv1 and GICv2 implementations
2
secondary bootloader. This code wasn't checking that the
3
for the case where the interrupt number is less than GIC_INTERNAL.
3
load_image_targphys() succeeded. Check the return value and report
4
The desired behaviour here is:
4
the error to the user.
5
* for 11MPCore: RAZ/WI for irqs 0..28; read a number matching the
6
CPU doing the read for irqs 29..31
7
* for GICv1 and v2: RAZ/WI if uniprocessor; otherwise read a
8
number matching the CPU doing the read for all irqs < 32
9
5
10
Stop squashing GICD_ITARGETSR to 0 for IRQs 0..28 unless this
6
While we're in the vicinity, fix the comment style of the
11
is an 11MPCore GIC.
7
comment documenting what this image load is doing.
12
8
13
Reported-by: Jan Kiszka <jan.kiszka@web.de>
9
Fixes: Coverity CID 1192904
14
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
15
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
11
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
16
Reviewed-by: Luc Michel <luc.michel@greensocs.com>
12
Message-id: 20201103114918.11807-1-peter.maydell@linaro.org
17
Message-id: 20180712154152.32183-3-peter.maydell@linaro.org
18
---
13
---
19
hw/intc/arm_gic.c | 6 ++++--
14
hw/arm/nseries.c | 15 +++++++++++----
20
1 file changed, 4 insertions(+), 2 deletions(-)
15
1 file changed, 11 insertions(+), 4 deletions(-)
21
16
22
diff --git a/hw/intc/arm_gic.c b/hw/intc/arm_gic.c
17
diff --git a/hw/arm/nseries.c b/hw/arm/nseries.c
23
index XXXXXXX..XXXXXXX 100644
18
index XXXXXXX..XXXXXXX 100644
24
--- a/hw/intc/arm_gic.c
19
--- a/hw/arm/nseries.c
25
+++ b/hw/intc/arm_gic.c
20
+++ b/hw/arm/nseries.c
26
@@ -XXX,XX +XXX,XX @@ static uint32_t gic_dist_readb(void *opaque, hwaddr offset, MemTxAttrs attrs)
21
@@ -XXX,XX +XXX,XX @@ static void n8x0_init(MachineState *machine,
27
if (irq >= s->num_irq) {
22
/* No, wait, better start at the ROM. */
28
goto bad_reg;
23
s->mpu->cpu->env.regs[15] = OMAP2_Q2_BASE + 0x400000;
29
}
24
30
- if (irq >= 29 && irq <= 31) {
25
- /* This is intended for loading the `secondary.bin' program from
31
+ if (irq < 29 && s->revision == REV_11MPCORE) {
26
+ /*
32
+ res = 0;
27
+ * This is intended for loading the `secondary.bin' program from
33
+ } else if (irq < GIC_INTERNAL) {
28
* Nokia images (the NOLO bootloader). The entry point seems
34
res = cm;
29
* to be at OMAP2_Q2_BASE + 0x400000.
35
} else {
30
*
36
res = GIC_TARGET(irq);
31
@@ -XXX,XX +XXX,XX @@ static void n8x0_init(MachineState *machine,
37
@@ -XXX,XX +XXX,XX @@ static void gic_dist_writeb(void *opaque, hwaddr offset,
32
* for them the entry point needs to be set to OMAP2_SRAM_BASE.
38
if (irq >= s->num_irq) {
33
*
39
goto bad_reg;
34
* The code above is for loading the `zImage' file from Nokia
40
}
35
- * images. */
41
- if (irq < 29) {
36
- load_image_targphys(option_rom[0].name, OMAP2_Q2_BASE + 0x400000,
42
+ if (irq < 29 && s->revision == REV_11MPCORE) {
37
- machine->ram_size - 0x400000);
43
value = 0;
38
+ * images.
44
} else if (irq < GIC_INTERNAL) {
39
+ */
45
value = ALL_CPU_MASK;
40
+ if (load_image_targphys(option_rom[0].name,
41
+ OMAP2_Q2_BASE + 0x400000,
42
+ machine->ram_size - 0x400000) < 0) {
43
+ error_report("Failed to load secondary bootloader %s",
44
+ option_rom[0].name);
45
+ exit(EXIT_FAILURE);
46
+ }
47
48
n800_setup_nolo_tags(nolo_tags);
49
cpu_physical_memory_write(OMAP2_SRAM_BASE, nolo_tags, 0x10000);
46
--
50
--
47
2.17.1
51
2.20.1
48
52
49
53
diff view generated by jsdifflib
1
In get_page_addr_code(), we were incorrectly looking in the victim
1
From: Havard Skinnemoen <hskinnemoen@google.com>
2
TLB for an entry which matched the target address for reads, not
3
for code accesses. This meant that we could hit on a victim TLB
4
entry that indicated that the address was readable but not
5
executable, and incorrectly bypass the call to tlb_fill() which
6
should generate the guest MMU exception. Fix this bug.
7
2
3
The number of runs is equal to the number of 0-1 and 1-0 transitions,
4
plus one. Currently, it's counting the number of times these transitions
5
do _not_ happen, plus one.
6
7
Source:
8
https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-22r1a.pdf
9
section 2.3.4 point (3).
10
11
Signed-off-by: Havard Skinnemoen <hskinnemoen@google.com>
12
Message-id: 20201103011457.2959989-2-hskinnemoen@google.com
13
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
8
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
14
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
9
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
10
Message-id: 20180713141636.18665-2-peter.maydell@linaro.org
11
---
15
---
12
accel/tcg/cputlb.c | 2 +-
16
tests/qtest/npcm7xx_rng-test.c | 2 +-
13
1 file changed, 1 insertion(+), 1 deletion(-)
17
1 file changed, 1 insertion(+), 1 deletion(-)
14
18
15
diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c
19
diff --git a/tests/qtest/npcm7xx_rng-test.c b/tests/qtest/npcm7xx_rng-test.c
16
index XXXXXXX..XXXXXXX 100644
20
index XXXXXXX..XXXXXXX 100644
17
--- a/accel/tcg/cputlb.c
21
--- a/tests/qtest/npcm7xx_rng-test.c
18
+++ b/accel/tcg/cputlb.c
22
+++ b/tests/qtest/npcm7xx_rng-test.c
19
@@ -XXX,XX +XXX,XX @@ tb_page_addr_t get_page_addr_code(CPUArchState *env, target_ulong addr)
23
@@ -XXX,XX +XXX,XX @@ static double calc_runs_p(const unsigned long *buf, unsigned int nr_bits)
20
index = (addr >> TARGET_PAGE_BITS) & (CPU_TLB_SIZE - 1);
24
pi = (double)nr_ones / nr_bits;
21
mmu_idx = cpu_mmu_index(env, true);
25
22
if (unlikely(!tlb_hit(env->tlb_table[mmu_idx][index].addr_code, addr))) {
26
for (k = 0; k < nr_bits - 1; k++) {
23
- if (!VICTIM_TLB_HIT(addr_read, addr)) {
27
- vn_obs += !(test_bit(k, buf) ^ test_bit(k + 1, buf));
24
+ if (!VICTIM_TLB_HIT(addr_code, addr)) {
28
+ vn_obs += (test_bit(k, buf) ^ test_bit(k + 1, buf));
25
tlb_fill(ENV_GET_CPU(env), addr, 0, MMU_INST_FETCH, mmu_idx, 0);
26
}
27
}
29
}
30
vn_obs += 1;
31
28
--
32
--
29
2.17.1
33
2.20.1
30
34
31
35
diff view generated by jsdifflib
1
In gic_deactivate_irq() the interrupt number comes from the guest
1
Checks for UNDEF cases should go before the "is VFP enabled?" access
2
(on a write to the GICC_DIR register), so we need to sanity check
2
check, except in special cases. Move a stray UNDEF check in the VTBL
3
that it isn't out of range before we use it as an array index.
3
trans function up above the access check.
4
Handle this in a similar manner to the check we do in
5
gic_complete_irq() for the GICC_EOI register.
6
7
The array overrun is not disastrous because the calling code
8
uses (value & 0x3ff) to extract the interrupt field, so the
9
only out-of-range values possible are 1020..1023, which allow
10
overrunning only from irq_state[] into the following
11
irq_target[] array which the guest can already manipulate.
12
4
13
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
5
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
14
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
6
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
15
Reviewed-by: Luc Michel <luc.michel@greensocs.com>
7
Message-id: 20201109145324.2859-1-peter.maydell@linaro.org
16
Message-id: 20180712154152.32183-2-peter.maydell@linaro.org
17
---
8
---
18
hw/intc/arm_gic.c | 16 +++++++++++++++-
9
target/arm/translate-neon.c.inc | 8 ++++----
19
1 file changed, 15 insertions(+), 1 deletion(-)
10
1 file changed, 4 insertions(+), 4 deletions(-)
20
11
21
diff --git a/hw/intc/arm_gic.c b/hw/intc/arm_gic.c
12
diff --git a/target/arm/translate-neon.c.inc b/target/arm/translate-neon.c.inc
22
index XXXXXXX..XXXXXXX 100644
13
index XXXXXXX..XXXXXXX 100644
23
--- a/hw/intc/arm_gic.c
14
--- a/target/arm/translate-neon.c.inc
24
+++ b/hw/intc/arm_gic.c
15
+++ b/target/arm/translate-neon.c.inc
25
@@ -XXX,XX +XXX,XX @@ static bool gic_eoi_split(GICState *s, int cpu, MemTxAttrs attrs)
16
@@ -XXX,XX +XXX,XX @@ static bool trans_VTBL(DisasContext *s, arg_VTBL *a)
26
static void gic_deactivate_irq(GICState *s, int cpu, int irq, MemTxAttrs attrs)
17
return false;
27
{
18
}
28
int cm = 1 << cpu;
19
29
- int group = gic_has_groups(s) && GIC_TEST_GROUP(irq, cm);
20
- if (!vfp_access_check(s)) {
30
+ int group;
21
- return true;
31
+
22
- }
32
+ if (irq >= s->num_irq) {
23
-
33
+ /*
24
if ((a->vn + a->len + 1) > 32) {
34
+ * This handles two cases:
25
/*
35
+ * 1. If software writes the ID of a spurious interrupt [ie 1023]
26
* This is UNPREDICTABLE; we choose to UNDEF to avoid the
36
+ * to the GICC_DIR, the GIC ignores that write.
27
@@ -XXX,XX +XXX,XX @@ static bool trans_VTBL(DisasContext *s, arg_VTBL *a)
37
+ * 2. If software writes the number of a non-existent interrupt
28
return false;
38
+ * this must be a subcase of "value written is not an active interrupt"
29
}
39
+ * and so this is UNPREDICTABLE. We choose to ignore it.
30
40
+ */
31
+ if (!vfp_access_check(s)) {
41
+ return;
32
+ return true;
42
+ }
33
+ }
43
+
34
+
44
+ group = gic_has_groups(s) && GIC_TEST_GROUP(irq, cm);
35
desc = tcg_const_i32((a->vn << 2) | a->len);
45
36
def = tcg_temp_new_i64();
46
if (!gic_eoi_split(s, cpu, attrs)) {
37
if (a->op) {
47
/* This is UNPREDICTABLE; we choose to ignore it */
48
--
38
--
49
2.17.1
39
2.20.1
50
40
51
41
diff view generated by jsdifflib