1
Patches for rc1: nothing major, just some minor bugfixes and
1
The following changes since commit 7993b0f83fe5c3f8555e79781d5d098f99751a94:
2
code cleanups.
3
2
4
-- PMM
3
Merge remote-tracking branch 'remotes/nvme/tags/nvme-fixes-for-6.0-pull-request' into staging (2021-03-29 18:45:12 +0100)
5
6
The following changes since commit f7e1914adad8885a5d4c70239ab90d901ed97e9f:
7
8
Merge remote-tracking branch 'remotes/alistair/tags/pull-riscv-to-apply-20201109' into staging (2020-11-10 09:24:56 +0000)
9
4
10
are available in the Git repository at:
5
are available in the Git repository at:
11
6
12
https://git.linaro.org/people/pmaydell/qemu-arm.git tags/pull-target-arm-20201110
7
https://git.linaro.org/people/pmaydell/qemu-arm.git pull-target-arm-20210330
13
8
14
for you to fetch changes up to b6c56c8a9a4064ea783f352f43c5df6231a110fa:
9
for you to fetch changes up to b9e3f1579a4b06fc63dfa8cdb68df1c58eeb0cf1:
15
10
16
target/arm/translate-neon.c: Handle VTBL UNDEF case before VFP access check (2020-11-10 11:03:48 +0000)
11
hw/timer/renesas_tmr: Add default-case asserts in read_tcnt() (2021-03-30 14:05:34 +0100)
17
12
18
----------------------------------------------------------------
13
----------------------------------------------------------------
19
target-arm queue:
14
* net/npcm7xx_emc.c: Fix handling of receiving packets when RSDR not set
20
* hw/arm/Kconfig: ARM_V7M depends on PTIMER
15
* hw/display/xlnx_dp: Free FIFOs adding xlnx_dp_finalize()
21
* Minor coding style fixes
16
* hw/arm/smmuv3: Drop unused CDM_VALID() and is_cd_valid()
22
* docs: add some notes on the sbsa-ref machine
17
* target/arm: Make number of counters in PMCR follow the CPU
23
* hw/arm/virt: Remove dependency on Cortex-A15 MPCore peripherals
18
* hw/timer/renesas_tmr: Add default-case asserts in read_tcnt()
24
* target/arm: Fix neon VTBL/VTBX for len > 1
25
* hw/arm/armsse: Correct expansion MPC interrupt lines
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
19
34
----------------------------------------------------------------
20
----------------------------------------------------------------
35
Alex Bennée (1):
21
Doug Evans (1):
36
docs: add some notes on the sbsa-ref machine
22
net/npcm7xx_emc.c: Fix handling of receiving packets when RSDR not set
37
38
AlexChen (1):
39
ssi: Fix bad printf format specifiers
40
41
Andrew Jones (1):
42
hw/arm/Kconfig: ARM_V7M depends on PTIMER
43
44
Havard Skinnemoen (1):
45
tests/qtest/npcm7xx_rng-test: count runs properly
46
23
47
Peter Maydell (2):
24
Peter Maydell (2):
48
hw/arm/nseries: Check return value from load_image_targphys()
25
target/arm: Make number of counters in PMCR follow the CPU
49
target/arm/translate-neon.c: Handle VTBL UNDEF case before VFP access check
26
hw/timer/renesas_tmr: Add default-case asserts in read_tcnt()
50
27
51
Philippe Mathieu-Daudé (6):
28
Philippe Mathieu-Daudé (1):
52
hw/arm/virt: Remove dependency on Cortex-A15 MPCore peripherals
29
hw/display/xlnx_dp: Free FIFOs adding xlnx_dp_finalize()
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
58
30
59
Richard Henderson (1):
31
Zenghui Yu (1):
60
target/arm: Fix neon VTBL/VTBX for len > 1
32
hw/arm/smmuv3: Drop unused CDM_VALID() and is_cd_valid()
61
33
62
Xinhao Zhang (3):
34
hw/arm/smmuv3-internal.h | 7 -------
63
target/arm: add spaces around operator
35
target/arm/cpu.h | 1 +
64
target/arm: Don't use '#' flag of printf format
36
hw/display/xlnx_dp.c | 9 +++++++++
65
target/arm: add space before the open parenthesis '('
37
hw/net/npcm7xx_emc.c | 4 +++-
38
hw/timer/renesas_tmr.c | 4 ++++
39
target/arm/cpu64.c | 3 +++
40
target/arm/cpu_tcg.c | 5 +++++
41
target/arm/helper.c | 29 +++++++++++++++++------------
42
target/arm/kvm64.c | 2 ++
43
tests/qtest/npcm7xx_emc-test.c | 30 +++++++++++++++++++++---------
44
10 files changed, 65 insertions(+), 29 deletions(-)
66
45
67
docs/system/arm/sbsa.rst | 32 ++++++++++++++++++++++
68
docs/system/target-arm.rst | 1 +
69
include/hw/misc/stm32f2xx_syscfg.h | 2 --
70
target/arm/helper.h | 2 +-
71
hw/arm/armsse.c | 3 +-
72
hw/arm/musicpal.c | 40 +++++++++++++++++----------
73
hw/arm/nseries.c | 26 ++++++++----------
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
89
diff view generated by jsdifflib
Deleted patch
1
From: Andrew Jones <drjones@redhat.com>
2
1
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
Deleted patch
1
From: AlexChen <alex.chen@huawei.com>
2
1
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
1
From: Richard Henderson <richard.henderson@linaro.org>
1
From: Doug Evans <dje@google.com>
2
2
3
The helper function did not get updated when we reorganized
3
Turning REG_MCMDR_RXON is enough to start receiving packets.
4
the vector register file for SVE. Since then, the neon dregs
5
are non-sequential and cannot be simply indexed.
6
4
7
At the same time, make the helper function operate on 64-bit
5
Signed-off-by: Doug Evans <dje@google.com>
8
quantities so that we do not have to call it twice.
6
Message-id: 20210319195044.741821-1-dje@google.com
9
10
Fixes: c39c2b9043e
11
Reported-by: Ard Biesheuvel <ardb@kernel.org>
12
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
13
[PMM: use aa32_vfp_dreg() rather than opencoding]
14
Message-id: 20201105171126.88014-1-richard.henderson@linaro.org
15
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
7
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
16
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
8
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
17
---
9
---
18
target/arm/helper.h | 2 +-
10
hw/net/npcm7xx_emc.c | 4 +++-
19
target/arm/op_helper.c | 23 +++++++++--------
11
tests/qtest/npcm7xx_emc-test.c | 30 +++++++++++++++++++++---------
20
target/arm/translate-neon.c.inc | 44 +++++++++++----------------------
12
2 files changed, 24 insertions(+), 10 deletions(-)
21
3 files changed, 29 insertions(+), 40 deletions(-)
22
13
23
diff --git a/target/arm/helper.h b/target/arm/helper.h
14
diff --git a/hw/net/npcm7xx_emc.c b/hw/net/npcm7xx_emc.c
24
index XXXXXXX..XXXXXXX 100644
15
index XXXXXXX..XXXXXXX 100644
25
--- a/target/arm/helper.h
16
--- a/hw/net/npcm7xx_emc.c
26
+++ b/target/arm/helper.h
17
+++ b/hw/net/npcm7xx_emc.c
27
@@ -XXX,XX +XXX,XX @@ DEF_HELPER_FLAGS_2(rsqrte_f32, TCG_CALL_NO_RWG, f32, f32, ptr)
18
@@ -XXX,XX +XXX,XX @@ static void npcm7xx_emc_write(void *opaque, hwaddr offset,
28
DEF_HELPER_FLAGS_2(rsqrte_f64, TCG_CALL_NO_RWG, f64, f64, ptr)
19
!(value & REG_MCMDR_RXON)) {
29
DEF_HELPER_FLAGS_1(recpe_u32, TCG_CALL_NO_RWG, i32, i32)
20
emc->regs[REG_MGSTA] |= REG_MGSTA_RXHA;
30
DEF_HELPER_FLAGS_1(rsqrte_u32, TCG_CALL_NO_RWG, i32, i32)
21
}
31
-DEF_HELPER_FLAGS_4(neon_tbl, TCG_CALL_NO_RWG, i32, i32, i32, ptr, i32)
22
- if (!(value & REG_MCMDR_RXON)) {
32
+DEF_HELPER_FLAGS_4(neon_tbl, TCG_CALL_NO_RWG, i64, env, i32, i64, i64)
23
+ if (value & REG_MCMDR_RXON) {
33
24
+ emc->rx_active = true;
34
DEF_HELPER_3(shl_cc, i32, env, i32, i32)
25
+ } else {
35
DEF_HELPER_3(shr_cc, i32, env, i32, i32)
26
emc_halt_rx(emc, 0);
36
diff --git a/target/arm/op_helper.c b/target/arm/op_helper.c
27
}
28
break;
29
diff --git a/tests/qtest/npcm7xx_emc-test.c b/tests/qtest/npcm7xx_emc-test.c
37
index XXXXXXX..XXXXXXX 100644
30
index XXXXXXX..XXXXXXX 100644
38
--- a/target/arm/op_helper.c
31
--- a/tests/qtest/npcm7xx_emc-test.c
39
+++ b/target/arm/op_helper.c
32
+++ b/tests/qtest/npcm7xx_emc-test.c
40
@@ -XXX,XX +XXX,XX @@ void raise_exception_ra(CPUARMState *env, uint32_t excp, uint32_t syndrome,
33
@@ -XXX,XX +XXX,XX @@ static void enable_tx(QTestState *qts, const EMCModule *mod,
41
cpu_loop_exit_restore(cs, ra);
34
mcmdr |= REG_MCMDR_TXON;
35
emc_write(qts, mod, REG_MCMDR, mcmdr);
36
}
37
-
38
- /* Prod the device to send the packet. */
39
- emc_write(qts, mod, REG_TSDR, 1);
42
}
40
}
43
41
44
-uint32_t HELPER(neon_tbl)(uint32_t ireg, uint32_t def, void *vn,
42
static void emc_send_verify1(QTestState *qts, const EMCModule *mod, int fd,
45
- uint32_t maxindex)
43
@@ -XXX,XX +XXX,XX @@ static void emc_send_verify(QTestState *qts, const EMCModule *mod, int fd,
46
+uint64_t HELPER(neon_tbl)(CPUARMState *env, uint32_t desc,
44
enable_tx(qts, mod, &desc[0], NUM_TX_DESCRIPTORS, desc_addr,
47
+ uint64_t ireg, uint64_t def)
45
with_irq ? REG_MIEN_ENTXINTR : 0);
46
47
+ /* Prod the device to send the packet. */
48
+ emc_write(qts, mod, REG_TSDR, 1);
49
+
50
/*
51
* It's problematic to observe the interrupt for each packet.
52
* Instead just wait until all the packets go out.
53
@@ -XXX,XX +XXX,XX @@ static void enable_rx(QTestState *qts, const EMCModule *mod,
54
mcmdr |= REG_MCMDR_RXON | mcmdr_flags;
55
emc_write(qts, mod, REG_MCMDR, mcmdr);
56
}
57
-
58
- /* Prod the device to accept a packet. */
59
- emc_write(qts, mod, REG_RSDR, 1);
60
}
61
62
static void emc_recv_verify(QTestState *qts, const EMCModule *mod, int fd,
63
- bool with_irq)
64
+ bool with_irq, bool pump_rsdr)
48
{
65
{
49
- uint32_t val, shift;
66
NPCM7xxEMCRxDesc desc[NUM_RX_DESCRIPTORS];
50
- uint64_t *table = vn;
67
uint32_t desc_addr = DESC_ADDR;
51
+ uint64_t tmp, val = 0;
68
@@ -XXX,XX +XXX,XX @@ static void emc_recv_verify(QTestState *qts, const EMCModule *mod, int fd,
52
+ uint32_t maxindex = ((desc & 3) + 1) * 8;
69
enable_rx(qts, mod, &desc[0], NUM_RX_DESCRIPTORS, desc_addr,
53
+ uint32_t base_reg = desc >> 2;
70
with_irq ? REG_MIEN_ENRXINTR : 0, 0);
54
+ uint32_t shift, index, reg;
71
55
72
+ /*
56
- val = 0;
73
+ * If requested, prod the device to accept a packet.
57
- for (shift = 0; shift < 32; shift += 8) {
74
+ * This isn't necessary, the linux driver doesn't do this.
58
- uint32_t index = (ireg >> shift) & 0xff;
75
+ * Test doing/not-doing this for robustness.
59
+ for (shift = 0; shift < 64; shift += 8) {
76
+ */
60
+ index = (ireg >> shift) & 0xff;
77
+ if (pump_rsdr) {
61
if (index < maxindex) {
78
+ emc_write(qts, mod, REG_RSDR, 1);
62
- uint32_t tmp = (table[index >> 3] >> ((index & 7) << 3)) & 0xff;
79
+ }
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
+
80
+
142
+ tcg_temp_free_i64(def);
81
/* Send test packet to device's socket. */
143
+ tcg_temp_free_i64(val);
82
ret = iov_send(fd, iov, 2, 0, sizeof(len) + sizeof(test));
144
+ tcg_temp_free_i32(desc);
83
g_assert_cmpint(ret, == , sizeof(test) + sizeof(len));
145
return true;
84
@@ -XXX,XX +XXX,XX @@ static void test_rx(gconstpointer test_data)
146
}
85
147
86
qtest_irq_intercept_in(qts, "/machine/soc/a9mpcore/gic");
87
88
- emc_recv_verify(qts, td->module, test_sockets[0], /*with_irq=*/false);
89
- emc_recv_verify(qts, td->module, test_sockets[0], /*with_irq=*/true);
90
+ emc_recv_verify(qts, td->module, test_sockets[0], /*with_irq=*/false,
91
+ /*pump_rsdr=*/false);
92
+ emc_recv_verify(qts, td->module, test_sockets[0], /*with_irq=*/false,
93
+ /*pump_rsdr=*/true);
94
+ emc_recv_verify(qts, td->module, test_sockets[0], /*with_irq=*/true,
95
+ /*pump_rsdr=*/false);
96
+ emc_recv_verify(qts, td->module, test_sockets[0], /*with_irq=*/true,
97
+ /*pump_rsdr=*/true);
98
emc_test_ptle(qts, td->module, test_sockets[0]);
99
100
qtest_quit(qts);
148
--
101
--
149
2.20.1
102
2.20.1
150
103
151
104
diff view generated by jsdifflib
1
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
1
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
2
2
3
The system configuration controller (SYSCFG) doesn't have
3
When building with --enable-sanitizers we get:
4
any output IRQ (and the INTC input #71 belongs to the UART6).
5
Remove the invalid code.
6
4
7
Fixes: db635521a02 ("stm32f205: Add the stm32f205 SoC")
5
Direct leak of 16 byte(s) in 1 object(s) allocated from:
6
#0 0x5618479ec7cf in malloc (qemu-system-aarch64+0x233b7cf)
7
#1 0x7f675745f958 in g_malloc (/lib64/libglib-2.0.so.0+0x58958)
8
#2 0x561847c2dcc9 in xlnx_dp_init hw/display/xlnx_dp.c:1259:5
9
#3 0x56184a5bdab8 in object_init_with_type qom/object.c:375:9
10
#4 0x56184a5a2bda in object_initialize_with_type qom/object.c:517:5
11
#5 0x56184a5a24d5 in object_initialize qom/object.c:536:5
12
#6 0x56184a5a2f6c in object_initialize_child_with_propsv qom/object.c:566:5
13
#7 0x56184a5a2e60 in object_initialize_child_with_props qom/object.c:549:10
14
#8 0x56184a5a3a1e in object_initialize_child_internal qom/object.c:603:5
15
#9 0x5618495aa431 in xlnx_zynqmp_init hw/arm/xlnx-zynqmp.c:273:5
16
17
The RX/TX FIFOs are created in xlnx_dp_init(), add xlnx_dp_finalize()
18
to destroy them.
19
20
Fixes: 58ac482a66d ("introduce xlnx-dp")
8
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
21
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
9
Message-id: 20201107193403.436146-3-f4bug@amsat.org
22
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
10
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
23
Message-id: 20210323182958.277654-1-f4bug@amsat.org
11
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
24
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
12
---
25
---
13
include/hw/misc/stm32f2xx_syscfg.h | 2 --
26
hw/display/xlnx_dp.c | 9 +++++++++
14
hw/arm/stm32f205_soc.c | 1 -
27
1 file changed, 9 insertions(+)
15
hw/misc/stm32f2xx_syscfg.c | 2 --
16
3 files changed, 5 deletions(-)
17
28
18
diff --git a/include/hw/misc/stm32f2xx_syscfg.h b/include/hw/misc/stm32f2xx_syscfg.h
29
diff --git a/hw/display/xlnx_dp.c b/hw/display/xlnx_dp.c
19
index XXXXXXX..XXXXXXX 100644
30
index XXXXXXX..XXXXXXX 100644
20
--- a/include/hw/misc/stm32f2xx_syscfg.h
31
--- a/hw/display/xlnx_dp.c
21
+++ b/include/hw/misc/stm32f2xx_syscfg.h
32
+++ b/hw/display/xlnx_dp.c
22
@@ -XXX,XX +XXX,XX @@ struct STM32F2XXSyscfgState {
33
@@ -XXX,XX +XXX,XX @@ static void xlnx_dp_init(Object *obj)
23
uint32_t syscfg_exticr3;
34
fifo8_create(&s->tx_fifo, 16);
24
uint32_t syscfg_exticr4;
35
}
25
uint32_t syscfg_cmpcr;
36
26
-
37
+static void xlnx_dp_finalize(Object *obj)
27
- qemu_irq irq;
38
+{
39
+ XlnxDPState *s = XLNX_DP(obj);
40
+
41
+ fifo8_destroy(&s->tx_fifo);
42
+ fifo8_destroy(&s->rx_fifo);
43
+}
44
+
45
static void xlnx_dp_realize(DeviceState *dev, Error **errp)
46
{
47
XlnxDPState *s = XLNX_DP(dev);
48
@@ -XXX,XX +XXX,XX @@ static const TypeInfo xlnx_dp_info = {
49
.parent = TYPE_SYS_BUS_DEVICE,
50
.instance_size = sizeof(XlnxDPState),
51
.instance_init = xlnx_dp_init,
52
+ .instance_finalize = xlnx_dp_finalize,
53
.class_init = xlnx_dp_class_init,
28
};
54
};
29
55
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
--
56
--
57
2.20.1
57
2.20.1
58
58
59
59
diff view generated by jsdifflib
1
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
1
From: Zenghui Yu <yuzenghui@huawei.com>
2
2
3
omap2420_mpu_init() introduced in commit 827df9f3c5f ("Add basic
3
They were introduced in commit 9bde7f0674fe ("hw/arm/smmuv3: Implement
4
OMAP2 chip support") takes care of creating the 3 UARTs.
4
translate callback") but never actually used. Drop them.
5
5
6
Then commit 58a26b477e9 ("Emulate a serial bluetooth HCI with H4+
6
Signed-off-by: Zenghui Yu <yuzenghui@huawei.com>
7
extensions and attach to n8x0's UART") added n8x0_uart_setup()
7
Acked-by: Eric Auger <eric.auger@redhat.com>
8
which create the UART and connects it to an IRQ output,
8
Message-id: 20210325142702.790-1-yuzenghui@huawei.com
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
19
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
9
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
20
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
21
---
11
---
22
hw/arm/nseries.c | 11 -----------
12
hw/arm/smmuv3-internal.h | 7 -------
23
1 file changed, 11 deletions(-)
13
1 file changed, 7 deletions(-)
24
14
25
diff --git a/hw/arm/nseries.c b/hw/arm/nseries.c
15
diff --git a/hw/arm/smmuv3-internal.h b/hw/arm/smmuv3-internal.h
26
index XXXXXXX..XXXXXXX 100644
16
index XXXXXXX..XXXXXXX 100644
27
--- a/hw/arm/nseries.c
17
--- a/hw/arm/smmuv3-internal.h
28
+++ b/hw/arm/nseries.c
18
+++ b/hw/arm/smmuv3-internal.h
29
@@ -XXX,XX +XXX,XX @@ static void n8x0_cbus_setup(struct n800_s *s)
19
@@ -XXX,XX +XXX,XX @@ static inline int pa_range(STE *ste)
30
cbus_attach(cbus, s->tahvo = tahvo_init(tahvo_irq, 1));
20
#define CD_A(x) extract32((x)->word[1], 14, 1)
31
}
21
#define CD_AARCH64(x) extract32((x)->word[1], 9 , 1)
32
22
33
-static void n8x0_uart_setup(struct n800_s *s)
23
-#define CDM_VALID(x) ((x)->word[0] & 0x1)
24
-
25
-static inline int is_cd_valid(SMMUv3State *s, STE *ste, CD *cd)
34
-{
26
-{
35
- Chardev *radio = qemu_chr_new("bt-dummy-uart", "null", NULL);
27
- return CD_VALID(cd);
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
-}
28
-}
42
-
29
-
43
static void n8x0_usb_setup(struct n800_s *s)
30
/**
44
{
31
* tg2granule - Decodes the CD translation granule size field according
45
SysBusDevice *dev;
32
* to the ttbr in use
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
}
54
--
33
--
55
2.20.1
34
2.20.1
56
35
57
36
diff view generated by jsdifflib
1
From: Xinhao Zhang <zhangxinhao1@huawei.com>
1
Currently we give all the v7-and-up CPUs a PMU with 4 counters. This
2
2
means that we don't provide the 6 counters that are required by the
3
Fix code style. Operator needs spaces both sides.
3
Arm BSA (Base System Architecture) specification if the CPU supports
4
4
the Virtualization extensions.
5
Signed-off-by: Xinhao Zhang <zhangxinhao1@huawei.com>
5
6
Signed-off-by: Kai Deng <dengkai1@huawei.com>
6
Instead of having a single PMCR_NUM_COUNTERS, make each CPU type
7
Message-id: 20201103114529.638233-1-zhangxinhao1@huawei.com
7
specify the PMCR reset value (obtained from the appropriate TRM), and
8
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
8
use the 'N' field of that value to define the number of counters
9
provided.
10
11
This means that we now supply 6 counters for Cortex-A53, A57, A72,
12
A15 and A9 as well as '-cpu max'; Cortex-A7 and A8 stay at 4; and
13
Cortex-R5 goes down to 3.
14
15
Note that because we now use the PMCR reset value of the specific
16
implementation, we no longer set the LC bit out of reset. This has
17
an UNKNOWN value out of reset for all cores with any AArch32 support,
18
so guest software should be setting it anyway if it wants it.
19
9
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
20
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
21
Tested-by: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
22
Message-id: 20210311165947.27470-1-peter.maydell@linaro.org
23
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
10
---
24
---
11
target/arm/arch_dump.c | 8 ++++----
25
target/arm/cpu.h | 1 +
12
target/arm/arm-semi.c | 8 ++++----
26
target/arm/cpu64.c | 3 +++
13
target/arm/helper.c | 2 +-
27
target/arm/cpu_tcg.c | 5 +++++
14
3 files changed, 9 insertions(+), 9 deletions(-)
28
target/arm/helper.c | 29 +++++++++++++++++------------
15
29
target/arm/kvm64.c | 2 ++
16
diff --git a/target/arm/arch_dump.c b/target/arm/arch_dump.c
30
5 files changed, 28 insertions(+), 12 deletions(-)
17
index XXXXXXX..XXXXXXX 100644
31
18
--- a/target/arm/arch_dump.c
32
diff --git a/target/arm/cpu.h b/target/arm/cpu.h
19
+++ b/target/arm/arch_dump.c
33
index XXXXXXX..XXXXXXX 100644
20
@@ -XXX,XX +XXX,XX @@ static int aarch64_write_elf64_prfpreg(WriteCoreDumpFunction f,
34
--- a/target/arm/cpu.h
21
35
+++ b/target/arm/cpu.h
22
for (i = 0; i < 32; ++i) {
36
@@ -XXX,XX +XXX,XX @@ struct ARMCPU {
23
uint64_t *q = aa64_vfp_qreg(env, i);
37
uint64_t id_aa64mmfr2;
24
- note.vfp.vregs[2*i + 0] = cpu_to_dump64(s, q[0]);
38
uint64_t id_aa64dfr0;
25
- note.vfp.vregs[2*i + 1] = cpu_to_dump64(s, q[1]);
39
uint64_t id_aa64dfr1;
26
+ note.vfp.vregs[2 * i + 0] = cpu_to_dump64(s, q[0]);
40
+ uint64_t reset_pmcr_el0;
27
+ note.vfp.vregs[2 * i + 1] = cpu_to_dump64(s, q[1]);
41
} isar;
28
}
42
uint64_t midr;
29
43
uint32_t revidr;
30
if (s->dump_info.d_endian == ELFDATA2MSB) {
44
diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c
31
@@ -XXX,XX +XXX,XX @@ static int aarch64_write_elf64_prfpreg(WriteCoreDumpFunction f,
45
index XXXXXXX..XXXXXXX 100644
32
*/
46
--- a/target/arm/cpu64.c
33
for (i = 0; i < 32; ++i) {
47
+++ b/target/arm/cpu64.c
34
uint64_t tmp = note.vfp.vregs[2*i];
48
@@ -XXX,XX +XXX,XX @@ static void aarch64_a57_initfn(Object *obj)
35
- note.vfp.vregs[2*i] = note.vfp.vregs[2*i+1];
49
cpu->gic_num_lrs = 4;
36
- note.vfp.vregs[2*i+1] = tmp;
50
cpu->gic_vpribits = 5;
37
+ note.vfp.vregs[2 * i] = note.vfp.vregs[2 * i + 1];
51
cpu->gic_vprebits = 5;
38
+ note.vfp.vregs[2 * i + 1] = tmp;
52
+ cpu->isar.reset_pmcr_el0 = 0x41013000;
39
}
53
define_arm_cp_regs(cpu, cortex_a72_a57_a53_cp_reginfo);
40
}
54
}
41
55
42
diff --git a/target/arm/arm-semi.c b/target/arm/arm-semi.c
56
@@ -XXX,XX +XXX,XX @@ static void aarch64_a53_initfn(Object *obj)
43
index XXXXXXX..XXXXXXX 100644
57
cpu->gic_num_lrs = 4;
44
--- a/target/arm/arm-semi.c
58
cpu->gic_vpribits = 5;
45
+++ b/target/arm/arm-semi.c
59
cpu->gic_vprebits = 5;
46
@@ -XXX,XX +XXX,XX @@ target_ulong do_arm_semihosting(CPUARMState *env)
60
+ cpu->isar.reset_pmcr_el0 = 0x41033000;
47
if (use_gdb_syscalls()) {
61
define_arm_cp_regs(cpu, cortex_a72_a57_a53_cp_reginfo);
48
arm_semi_open_guestfd = guestfd;
62
}
49
ret = arm_gdb_syscall(cpu, arm_semi_open_cb, "open,%s,%x,1a4", arg0,
63
50
- (int)arg2+1, gdb_open_modeflags[arg1]);
64
@@ -XXX,XX +XXX,XX @@ static void aarch64_a72_initfn(Object *obj)
51
+ (int)arg2 + 1, gdb_open_modeflags[arg1]);
65
cpu->gic_num_lrs = 4;
52
} else {
66
cpu->gic_vpribits = 5;
53
ret = set_swi_errno(env, open(s, open_modeflags[arg1], 0644));
67
cpu->gic_vprebits = 5;
54
if (ret == (uint32_t)-1) {
68
+ cpu->isar.reset_pmcr_el0 = 0x41023000;
55
@@ -XXX,XX +XXX,XX @@ target_ulong do_arm_semihosting(CPUARMState *env)
69
define_arm_cp_regs(cpu, cortex_a72_a57_a53_cp_reginfo);
56
GET_ARG(1);
70
}
57
if (use_gdb_syscalls()) {
71
58
ret = arm_gdb_syscall(cpu, arm_semi_cb, "unlink,%s",
72
diff --git a/target/arm/cpu_tcg.c b/target/arm/cpu_tcg.c
59
- arg0, (int)arg1+1);
73
index XXXXXXX..XXXXXXX 100644
60
+ arg0, (int)arg1 + 1);
74
--- a/target/arm/cpu_tcg.c
61
} else {
75
+++ b/target/arm/cpu_tcg.c
62
s = lock_user_string(arg0);
76
@@ -XXX,XX +XXX,XX @@ static void cortex_a8_initfn(Object *obj)
63
if (!s) {
77
cpu->ccsidr[1] = 0x2007e01a; /* 16k L1 icache. */
64
@@ -XXX,XX +XXX,XX @@ target_ulong do_arm_semihosting(CPUARMState *env)
78
cpu->ccsidr[2] = 0xf0000000; /* No L2 icache. */
65
GET_ARG(3);
79
cpu->reset_auxcr = 2;
66
if (use_gdb_syscalls()) {
80
+ cpu->isar.reset_pmcr_el0 = 0x41002000;
67
return arm_gdb_syscall(cpu, arm_semi_cb, "rename,%s,%s",
81
define_arm_cp_regs(cpu, cortexa8_cp_reginfo);
68
- arg0, (int)arg1+1, arg2, (int)arg3+1);
82
}
69
+ arg0, (int)arg1 + 1, arg2, (int)arg3 + 1);
83
70
} else {
84
@@ -XXX,XX +XXX,XX @@ static void cortex_a9_initfn(Object *obj)
71
char *s2;
85
cpu->clidr = (1 << 27) | (1 << 24) | 3;
72
s = lock_user_string(arg0);
86
cpu->ccsidr[0] = 0xe00fe019; /* 16k L1 dcache. */
73
@@ -XXX,XX +XXX,XX @@ target_ulong do_arm_semihosting(CPUARMState *env)
87
cpu->ccsidr[1] = 0x200fe019; /* 16k L1 icache. */
74
GET_ARG(1);
88
+ cpu->isar.reset_pmcr_el0 = 0x41093000;
75
if (use_gdb_syscalls()) {
89
define_arm_cp_regs(cpu, cortexa9_cp_reginfo);
76
return arm_gdb_syscall(cpu, arm_semi_cb, "system,%s",
90
}
77
- arg0, (int)arg1+1);
91
78
+ arg0, (int)arg1 + 1);
92
@@ -XXX,XX +XXX,XX @@ static void cortex_a7_initfn(Object *obj)
79
} else {
93
cpu->ccsidr[0] = 0x701fe00a; /* 32K L1 dcache */
80
s = lock_user_string(arg0);
94
cpu->ccsidr[1] = 0x201fe00a; /* 32K L1 icache */
81
if (!s) {
95
cpu->ccsidr[2] = 0x711fe07a; /* 4096K L2 unified cache */
96
+ cpu->isar.reset_pmcr_el0 = 0x41072000;
97
define_arm_cp_regs(cpu, cortexa15_cp_reginfo); /* Same as A15 */
98
}
99
100
@@ -XXX,XX +XXX,XX @@ static void cortex_a15_initfn(Object *obj)
101
cpu->ccsidr[0] = 0x701fe00a; /* 32K L1 dcache */
102
cpu->ccsidr[1] = 0x201fe00a; /* 32K L1 icache */
103
cpu->ccsidr[2] = 0x711fe07a; /* 4096K L2 unified cache */
104
+ cpu->isar.reset_pmcr_el0 = 0x410F3000;
105
define_arm_cp_regs(cpu, cortexa15_cp_reginfo);
106
}
107
108
@@ -XXX,XX +XXX,XX @@ static void cortex_r5_initfn(Object *obj)
109
cpu->isar.id_isar6 = 0x0;
110
cpu->mp_is_up = true;
111
cpu->pmsav7_dregion = 16;
112
+ cpu->isar.reset_pmcr_el0 = 0x41151800;
113
define_arm_cp_regs(cpu, cortexr5_cp_reginfo);
114
}
115
82
diff --git a/target/arm/helper.c b/target/arm/helper.c
116
diff --git a/target/arm/helper.c b/target/arm/helper.c
83
index XXXXXXX..XXXXXXX 100644
117
index XXXXXXX..XXXXXXX 100644
84
--- a/target/arm/helper.c
118
--- a/target/arm/helper.c
85
+++ b/target/arm/helper.c
119
+++ b/target/arm/helper.c
86
@@ -XXX,XX +XXX,XX @@ uint32_t HELPER(usad8)(uint32_t a, uint32_t b)
120
@@ -XXX,XX +XXX,XX @@
87
uint32_t sum;
121
#endif
88
sum = do_usad(a, b);
122
89
sum += do_usad(a >> 8, b >> 8);
123
#define ARM_CPU_FREQ 1000000000 /* FIXME: 1 GHz, should be configurable */
90
- sum += do_usad(a >> 16, b >>16);
124
-#define PMCR_NUM_COUNTERS 4 /* QEMU IMPDEF choice */
91
+ sum += do_usad(a >> 16, b >> 16);
125
92
sum += do_usad(a >> 24, b >> 24);
126
#ifndef CONFIG_USER_ONLY
93
return sum;
127
94
}
128
@@ -XXX,XX +XXX,XX @@ static const ARMCPRegInfo v6_cp_reginfo[] = {
129
130
static inline uint32_t pmu_num_counters(CPUARMState *env)
131
{
132
- return (env->cp15.c9_pmcr & PMCRN_MASK) >> PMCRN_SHIFT;
133
+ ARMCPU *cpu = env_archcpu(env);
134
+
135
+ return (cpu->isar.reset_pmcr_el0 & PMCRN_MASK) >> PMCRN_SHIFT;
136
}
137
138
/* Bits allowed to be set/cleared for PMCNTEN* and PMINTEN* */
139
@@ -XXX,XX +XXX,XX @@ static const ARMCPRegInfo el2_cp_reginfo[] = {
140
.resetvalue = 0,
141
.writefn = gt_hyp_ctl_write, .raw_writefn = raw_write },
142
#endif
143
- /* The only field of MDCR_EL2 that has a defined architectural reset value
144
- * is MDCR_EL2.HPMN which should reset to the value of PMCR_EL0.N.
145
- */
146
- { .name = "MDCR_EL2", .state = ARM_CP_STATE_BOTH,
147
- .opc0 = 3, .opc1 = 4, .crn = 1, .crm = 1, .opc2 = 1,
148
- .access = PL2_RW, .resetvalue = PMCR_NUM_COUNTERS,
149
- .fieldoffset = offsetof(CPUARMState, cp15.mdcr_el2), },
150
{ .name = "HPFAR", .state = ARM_CP_STATE_AA32,
151
.cp = 15, .opc1 = 4, .crn = 6, .crm = 0, .opc2 = 4,
152
.access = PL2_RW, .accessfn = access_el3_aa32ns,
153
@@ -XXX,XX +XXX,XX @@ static void define_pmu_regs(ARMCPU *cpu)
154
* field as main ID register, and we implement four counters in
155
* addition to the cycle count register.
156
*/
157
- unsigned int i, pmcrn = PMCR_NUM_COUNTERS;
158
+ unsigned int i, pmcrn = pmu_num_counters(&cpu->env);
159
ARMCPRegInfo pmcr = {
160
.name = "PMCR", .cp = 15, .crn = 9, .crm = 12, .opc1 = 0, .opc2 = 0,
161
.access = PL0_RW,
162
@@ -XXX,XX +XXX,XX @@ static void define_pmu_regs(ARMCPU *cpu)
163
.access = PL0_RW, .accessfn = pmreg_access,
164
.type = ARM_CP_IO,
165
.fieldoffset = offsetof(CPUARMState, cp15.c9_pmcr),
166
- .resetvalue = (cpu->midr & 0xff000000) | (pmcrn << PMCRN_SHIFT) |
167
- PMCRLC,
168
+ .resetvalue = cpu->isar.reset_pmcr_el0,
169
.writefn = pmcr_write, .raw_writefn = raw_write,
170
};
171
+
172
define_one_arm_cp_reg(cpu, &pmcr);
173
define_one_arm_cp_reg(cpu, &pmcr64);
174
for (i = 0; i < pmcrn; i++) {
175
@@ -XXX,XX +XXX,XX @@ void register_cp_regs_for_features(ARMCPU *cpu)
176
.fieldoffset = offsetof(CPUARMState, cp15.vmpidr_el2) },
177
REGINFO_SENTINEL
178
};
179
+ /*
180
+ * The only field of MDCR_EL2 that has a defined architectural reset
181
+ * value is MDCR_EL2.HPMN which should reset to the value of PMCR_EL0.N.
182
+ */
183
+ ARMCPRegInfo mdcr_el2 = {
184
+ .name = "MDCR_EL2", .state = ARM_CP_STATE_BOTH,
185
+ .opc0 = 3, .opc1 = 4, .crn = 1, .crm = 1, .opc2 = 1,
186
+ .access = PL2_RW, .resetvalue = pmu_num_counters(env),
187
+ .fieldoffset = offsetof(CPUARMState, cp15.mdcr_el2),
188
+ };
189
+ define_one_arm_cp_reg(cpu, &mdcr_el2);
190
define_arm_cp_regs(cpu, vpidr_regs);
191
define_arm_cp_regs(cpu, el2_cp_reginfo);
192
if (arm_feature(env, ARM_FEATURE_V8)) {
193
diff --git a/target/arm/kvm64.c b/target/arm/kvm64.c
194
index XXXXXXX..XXXXXXX 100644
195
--- a/target/arm/kvm64.c
196
+++ b/target/arm/kvm64.c
197
@@ -XXX,XX +XXX,XX @@ bool kvm_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf)
198
ARM64_SYS_REG(3, 0, 0, 7, 1));
199
err |= read_sys_reg64(fdarray[2], &ahcf->isar.id_aa64mmfr2,
200
ARM64_SYS_REG(3, 0, 0, 7, 2));
201
+ err |= read_sys_reg64(fdarray[2], &ahcf->isar.reset_pmcr_el0,
202
+ ARM64_SYS_REG(3, 3, 9, 12, 0));
203
204
/*
205
* Note that if AArch32 support is not present in the host,
95
--
206
--
96
2.20.1
207
2.20.1
97
208
98
209
diff view generated by jsdifflib
Deleted patch
1
From: Xinhao Zhang <zhangxinhao1@huawei.com>
2
1
3
Fix code style. Don't use '#' flag of printf format ('%#') in
4
format strings, use '0x' prefix instead
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>
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
11
---
12
target/arm/translate-a64.c | 4 ++--
13
1 file changed, 2 insertions(+), 2 deletions(-)
14
15
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
16
index XXXXXXX..XXXXXXX 100644
17
--- a/target/arm/translate-a64.c
18
+++ b/target/arm/translate-a64.c
19
@@ -XXX,XX +XXX,XX @@ static void disas_simd_three_reg_same_fp16(DisasContext *s, uint32_t insn)
20
gen_helper_advsimd_acgt_f16(tcg_res, tcg_op1, tcg_op2, fpst);
21
break;
22
default:
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();
35
}
36
37
--
38
2.20.1
39
40
diff view generated by jsdifflib
Deleted patch
1
From: Xinhao Zhang <zhangxinhao1@huawei.com>
2
1
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
Deleted patch
1
From: Alex Bennée <alex.bennee@linaro.org>
2
1
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
Deleted patch
1
From: Philippe Mathieu-Daudé <philmd@redhat.com>
2
1
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
Deleted patch
1
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
2
1
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
Deleted patch
1
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
2
1
3
The MusicPal board code connects both of the IRQ outputs of the UART
4
to the same INTC qemu_irq. Connecting two qemu_irqs outputs directly
5
to the same input is not valid as it produces subtly wrong behaviour
6
(for instance if both the IRQ lines are high, and then one goes
7
low, the INTC input will see this as a high-to-low transition
8
even though the second IRQ line should still be holding it high).
9
10
This kind of wiring needs an explicitly created OR gate; add one.
11
12
Inspired-by: Peter Maydell <peter.maydell@linaro.org>
13
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
14
Message-id: 20201107193403.436146-5-f4bug@amsat.org
15
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
16
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
17
---
18
hw/arm/musicpal.c | 17 +++++++++++++----
19
hw/arm/Kconfig | 1 +
20
2 files changed, 14 insertions(+), 4 deletions(-)
21
22
diff --git a/hw/arm/musicpal.c b/hw/arm/musicpal.c
23
index XXXXXXX..XXXXXXX 100644
24
--- a/hw/arm/musicpal.c
25
+++ b/hw/arm/musicpal.c
26
@@ -XXX,XX +XXX,XX @@
27
#include "ui/console.h"
28
#include "hw/i2c/i2c.h"
29
#include "hw/irq.h"
30
+#include "hw/or-irq.h"
31
#include "hw/audio/wm8750.h"
32
#include "sysemu/block-backend.h"
33
#include "sysemu/runstate.h"
34
@@ -XXX,XX +XXX,XX @@
35
#define MP_TIMER4_IRQ 7
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
84
--
85
2.20.1
86
87
diff view generated by jsdifflib
Deleted patch
1
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
2
1
3
We don't need to fill the full pic[] array if we only use
4
few of the interrupt lines. Directly call qdev_get_gpio_in()
5
when necessary.
6
7
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
8
Message-id: 20201107193403.436146-6-f4bug@amsat.org
9
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
11
---
12
hw/arm/musicpal.c | 25 +++++++++++++------------
13
1 file changed, 13 insertions(+), 12 deletions(-)
14
15
diff --git a/hw/arm/musicpal.c b/hw/arm/musicpal.c
16
index XXXXXXX..XXXXXXX 100644
17
--- a/hw/arm/musicpal.c
18
+++ b/hw/arm/musicpal.c
19
@@ -XXX,XX +XXX,XX @@ static struct arm_boot_info musicpal_binfo = {
20
static void musicpal_init(MachineState *machine)
21
{
22
ARMCPU *cpu;
23
- qemu_irq pic[32];
24
DeviceState *dev;
25
+ DeviceState *pic;
26
DeviceState *uart_orgate;
27
DeviceState *i2c_dev;
28
DeviceState *lcd_dev;
29
@@ -XXX,XX +XXX,XX @@ static void musicpal_init(MachineState *machine)
30
&error_fatal);
31
memory_region_add_subregion(address_space_mem, MP_SRAM_BASE, sram);
32
33
- dev = sysbus_create_simple(TYPE_MV88W8618_PIC, MP_PIC_BASE,
34
+ pic = sysbus_create_simple(TYPE_MV88W8618_PIC, MP_PIC_BASE,
35
qdev_get_gpio_in(DEVICE(cpu), ARM_CPU_IRQ));
36
- for (i = 0; i < 32; i++) {
37
- pic[i] = qdev_get_gpio_in(dev, i);
38
- }
39
- sysbus_create_varargs(TYPE_MV88W8618_PIT, MP_PIT_BASE, pic[MP_TIMER1_IRQ],
40
- pic[MP_TIMER2_IRQ], pic[MP_TIMER3_IRQ],
41
- pic[MP_TIMER4_IRQ], NULL);
42
+ sysbus_create_varargs(TYPE_MV88W8618_PIT, MP_PIT_BASE,
43
+ qdev_get_gpio_in(pic, MP_TIMER1_IRQ),
44
+ qdev_get_gpio_in(pic, MP_TIMER2_IRQ),
45
+ qdev_get_gpio_in(pic, MP_TIMER3_IRQ),
46
+ qdev_get_gpio_in(pic, MP_TIMER4_IRQ), NULL);
47
48
/* Logically OR both UART IRQs together */
49
uart_orgate = DEVICE(object_new(TYPE_OR_IRQ));
50
object_property_set_int(OBJECT(uart_orgate), "num-lines", 2, &error_fatal);
51
qdev_realize_and_unref(uart_orgate, NULL, &error_fatal);
52
- qdev_connect_gpio_out(DEVICE(uart_orgate), 0, pic[MP_UART_SHARED_IRQ]);
53
+ qdev_connect_gpio_out(DEVICE(uart_orgate), 0,
54
+ qdev_get_gpio_in(pic, MP_UART_SHARED_IRQ));
55
56
serial_mm_init(address_space_mem, MP_UART1_BASE, 2,
57
qdev_get_gpio_in(uart_orgate, 0),
58
@@ -XXX,XX +XXX,XX @@ static void musicpal_init(MachineState *machine)
59
OBJECT(get_system_memory()), &error_fatal);
60
sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
61
sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, MP_ETH_BASE);
62
- sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, pic[MP_ETH_IRQ]);
63
+ sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0,
64
+ qdev_get_gpio_in(pic, MP_ETH_IRQ));
65
66
sysbus_create_simple("mv88w8618_wlan", MP_WLAN_BASE, NULL);
67
68
sysbus_create_simple(TYPE_MUSICPAL_MISC, MP_MISC_BASE, NULL);
69
70
dev = sysbus_create_simple(TYPE_MUSICPAL_GPIO, MP_GPIO_BASE,
71
- pic[MP_GPIO_IRQ]);
72
+ qdev_get_gpio_in(pic, MP_GPIO_IRQ));
73
i2c_dev = sysbus_create_simple("gpio_i2c", -1, NULL);
74
i2c = (I2CBus *)qdev_get_child_bus(i2c_dev, "i2c");
75
76
@@ -XXX,XX +XXX,XX @@ static void musicpal_init(MachineState *machine)
77
NULL);
78
sysbus_realize_and_unref(s, &error_fatal);
79
sysbus_mmio_map(s, 0, MP_AUDIO_BASE);
80
- sysbus_connect_irq(s, 0, pic[MP_AUDIO_IRQ]);
81
+ sysbus_connect_irq(s, 0, qdev_get_gpio_in(pic, MP_AUDIO_IRQ));
82
83
musicpal_binfo.ram_size = MP_RAM_DEFAULT_SIZE;
84
arm_load_kernel(cpu, machine, &musicpal_binfo);
85
--
86
2.20.1
87
88
diff view generated by jsdifflib
Deleted patch
1
The nseries machines have a codepath that allows them to load a
2
secondary bootloader. This code wasn't checking that the
3
load_image_targphys() succeeded. Check the return value and report
4
the error to the user.
5
1
6
While we're in the vicinity, fix the comment style of the
7
comment documenting what this image load is doing.
8
9
Fixes: Coverity CID 1192904
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
11
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
12
Message-id: 20201103114918.11807-1-peter.maydell@linaro.org
13
---
14
hw/arm/nseries.c | 15 +++++++++++----
15
1 file changed, 11 insertions(+), 4 deletions(-)
16
17
diff --git a/hw/arm/nseries.c b/hw/arm/nseries.c
18
index XXXXXXX..XXXXXXX 100644
19
--- a/hw/arm/nseries.c
20
+++ b/hw/arm/nseries.c
21
@@ -XXX,XX +XXX,XX @@ static void n8x0_init(MachineState *machine,
22
/* No, wait, better start at the ROM. */
23
s->mpu->cpu->env.regs[15] = OMAP2_Q2_BASE + 0x400000;
24
25
- /* This is intended for loading the `secondary.bin' program from
26
+ /*
27
+ * This is intended for loading the `secondary.bin' program from
28
* Nokia images (the NOLO bootloader). The entry point seems
29
* to be at OMAP2_Q2_BASE + 0x400000.
30
*
31
@@ -XXX,XX +XXX,XX @@ static void n8x0_init(MachineState *machine,
32
* for them the entry point needs to be set to OMAP2_SRAM_BASE.
33
*
34
* The code above is for loading the `zImage' file from Nokia
35
- * images. */
36
- load_image_targphys(option_rom[0].name, OMAP2_Q2_BASE + 0x400000,
37
- machine->ram_size - 0x400000);
38
+ * images.
39
+ */
40
+ if (load_image_targphys(option_rom[0].name,
41
+ OMAP2_Q2_BASE + 0x400000,
42
+ machine->ram_size - 0x400000) < 0) {
43
+ error_report("Failed to load secondary bootloader %s",
44
+ option_rom[0].name);
45
+ exit(EXIT_FAILURE);
46
+ }
47
48
n800_setup_nolo_tags(nolo_tags);
49
cpu_physical_memory_write(OMAP2_SRAM_BASE, nolo_tags, 0x10000);
50
--
51
2.20.1
52
53
diff view generated by jsdifflib
Deleted patch
1
From: Havard Skinnemoen <hskinnemoen@google.com>
2
1
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>
14
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
15
---
16
tests/qtest/npcm7xx_rng-test.c | 2 +-
17
1 file changed, 1 insertion(+), 1 deletion(-)
18
19
diff --git a/tests/qtest/npcm7xx_rng-test.c b/tests/qtest/npcm7xx_rng-test.c
20
index XXXXXXX..XXXXXXX 100644
21
--- a/tests/qtest/npcm7xx_rng-test.c
22
+++ b/tests/qtest/npcm7xx_rng-test.c
23
@@ -XXX,XX +XXX,XX @@ static double calc_runs_p(const unsigned long *buf, unsigned int nr_bits)
24
pi = (double)nr_ones / nr_bits;
25
26
for (k = 0; k < nr_bits - 1; k++) {
27
- vn_obs += !(test_bit(k, buf) ^ test_bit(k + 1, buf));
28
+ vn_obs += (test_bit(k, buf) ^ test_bit(k + 1, buf));
29
}
30
vn_obs += 1;
31
32
--
33
2.20.1
34
35
diff view generated by jsdifflib
1
Checks for UNDEF cases should go before the "is VFP enabled?" access
1
In commit 81b3ddaf8772ec we fixed a use of uninitialized data
2
check, except in special cases. Move a stray UNDEF check in the VTBL
2
in read_tcnt(). However this change wasn't enough to placate
3
trans function up above the access check.
3
Coverity, which is not smart enough to see that if we read a
4
2 bit field and then handle cases 0, 1, 2 and 3 then there cannot
5
be a flow of execution through the switch default. Add explicit
6
default cases which assert that they can't be reached, which
7
should help silence Coverity.
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: Richard Henderson <richard.henderson@linaro.org>
10
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
7
Message-id: 20201109145324.2859-1-peter.maydell@linaro.org
11
Message-id: 20210319162458.13760-1-peter.maydell@linaro.org
8
---
12
---
9
target/arm/translate-neon.c.inc | 8 ++++----
13
hw/timer/renesas_tmr.c | 4 ++++
10
1 file changed, 4 insertions(+), 4 deletions(-)
14
1 file changed, 4 insertions(+)
11
15
12
diff --git a/target/arm/translate-neon.c.inc b/target/arm/translate-neon.c.inc
16
diff --git a/hw/timer/renesas_tmr.c b/hw/timer/renesas_tmr.c
13
index XXXXXXX..XXXXXXX 100644
17
index XXXXXXX..XXXXXXX 100644
14
--- a/target/arm/translate-neon.c.inc
18
--- a/hw/timer/renesas_tmr.c
15
+++ b/target/arm/translate-neon.c.inc
19
+++ b/hw/timer/renesas_tmr.c
16
@@ -XXX,XX +XXX,XX @@ static bool trans_VTBL(DisasContext *s, arg_VTBL *a)
20
@@ -XXX,XX +XXX,XX @@ static uint16_t read_tcnt(RTMRState *tmr, unsigned size, int ch)
17
return false;
21
case CSS_CASCADING:
18
}
22
tcnt[1] = tmr->tcnt[1];
19
23
break;
20
- if (!vfp_access_check(s)) {
24
+ default:
21
- return true;
25
+ g_assert_not_reached();
22
- }
26
}
23
-
27
switch (FIELD_EX8(tmr->tccr[0], TCCR, CSS)) {
24
if ((a->vn + a->len + 1) > 32) {
28
case CSS_INTERNAL:
25
/*
29
@@ -XXX,XX +XXX,XX @@ static uint16_t read_tcnt(RTMRState *tmr, unsigned size, int ch)
26
* This is UNPREDICTABLE; we choose to UNDEF to avoid the
30
case CSS_EXTERNAL: /* QEMU doesn't implement this */
27
@@ -XXX,XX +XXX,XX @@ static bool trans_VTBL(DisasContext *s, arg_VTBL *a)
31
tcnt[0] = tmr->tcnt[0];
28
return false;
32
break;
29
}
33
+ default:
30
34
+ g_assert_not_reached();
31
+ if (!vfp_access_check(s)) {
35
}
32
+ return true;
36
} else {
33
+ }
37
tcnt[0] = tmr->tcnt[0];
34
+
35
desc = tcg_const_i32((a->vn << 2) | a->len);
36
def = tcg_temp_new_i64();
37
if (a->op) {
38
--
38
--
39
2.20.1
39
2.20.1
40
40
41
41
diff view generated by jsdifflib