qemu-e2k/hw/misc
Peter Maydell 218fe5ce40 hw/misc/tz-mpc: Zero the LUT on initialization, not just reset
In the tz-mpc device we allocate a data block for the LUT,
which we then clear to zero in the device's reset method.
This is conceptually fine, but unfortunately results in a
valgrind complaint about use of uninitialized data on startup:

==30906== Conditional jump or move depends on uninitialised value(s)
==30906==    at 0x503609: tz_mpc_translate (tz-mpc.c:439)
==30906==    by 0x3F3D90: address_space_translate_iommu (exec.c:511)
==30906==    by 0x3F3FF8: flatview_do_translate (exec.c:584)
==30906==    by 0x3F4292: flatview_translate (exec.c:644)
==30906==    by 0x3F2120: address_space_translate (memory.h:1962)
==30906==    by 0x3FB753: address_space_ldl_internal (memory_ldst.inc.c:36)
==30906==    by 0x3FB8A6: address_space_ldl (memory_ldst.inc.c:80)
==30906==    by 0x619037: ldl_phys (memory_ldst_phys.inc.h:25)
==30906==    by 0x61985D: arm_cpu_reset (cpu.c:255)
==30906==    by 0x98791B: cpu_reset (cpu.c:249)
==30906==    by 0x57FFDB: armv7m_reset (armv7m.c:265)
==30906==    by 0x7B1775: qemu_devices_reset (reset.c:69)

This is because of a reset ordering problem -- the TZ MPC
resets after the CPU, but an M-profile CPU's reset function
includes memory loads to get the initial PC and SP, which
then go through an MPC that hasn't yet been reset.

The simplest fix for this is to zero the LUT when we
initialize the data, which will result in the MPC's
translate function giving the right answers for these
early memory accesses.

Reported-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Tested-by: Thomas Huth <thuth@redhat.com>
Message-id: 20180724153616.32352-1-peter.maydell@linaro.org
2018-07-30 14:52:15 +01:00
..
macio mac_dbdma: only dump commands for debug enabled channels 2018-07-03 09:56:51 +10:00
a9scu.c
applesmc.c
arm11scu.c
arm_integrator_debug.c
arm_l2x0.c
arm_sysctl.c
aspeed_scu.c aspeed: Implement write-1-{set, clear} for AST2500 strapping 2018-07-16 17:18:41 +01:00
aspeed_sdmc.c
auxbus.c hw/display/xlnx_dp: Move problematic code from instance_init to realize 2018-07-17 13:12:49 +01:00
bcm2835_mbox.c
bcm2835_property.c
bcm2835_rng.c
cbus.c
debugexit.c
eccmemctl.c
edu.c hw/misc: Use the IEC binary prefix definitions 2018-07-02 15:41:13 +02:00
exynos4210_clk.c
exynos4210_pmu.c
exynos4210_rng.c
hyperv_testdev.c hyperv: rename vcpu_id to vp_index 2018-07-16 16:58:16 +02:00
imx2_wdt.c
imx6_ccm.c
imx6_src.c
imx7_ccm.c
imx7_gpr.c
imx7_snvs.c
imx25_ccm.c
imx31_ccm.c
imx_ccm.c
iotkit-secctl.c hw/misc/iotkit-secctl.c: Implement SECMPCINTSTATUS 2018-06-22 13:28:40 +01:00
ivshmem.c hw/ivshmem: Use the IEC binary prefix definitions 2018-07-02 15:41:12 +02:00
Makefile.objs hw/misc/tz-mpc.c: Implement the Arm TrustZone Memory Protection Controller 2018-06-22 13:28:39 +01:00
max111x.c
milkymist-hpdmc.c
milkymist-pfpu.c
mips_cmgcr.c
mips_cpc.c
mips_itu.c hw/mips: Use the IEC binary prefix definitions 2018-07-02 15:41:16 +02:00
mmio_interface.c
mos6522.c mos6522: expose mos6522_update_irq() through MOS6522DeviceClass 2018-06-16 16:32:33 +10:00
mps2-fpgaio.c
mps2-scc.c
msf2-sysreg.c
mst_fpga.c
omap_clk.c
omap_gpmc.c
omap_l4.c
omap_sdrc.c
omap_tap.c
pc-testdev.c
pca9552.c misc: add pca9552 LED blinker model 2018-06-08 13:15:32 +01:00
pci-testdev.c
puv3_pm.c
pvpanic.c
sga.c hw/misc/sga: Use the correct ISA include 2018-06-01 14:15:10 +02:00
slavio_misc.c
stm32f2xx_syscfg.c
tmp105.c hw/i2c: Use DeviceClass::realize instead of I2CSlaveClass::init 2018-06-01 15:14:31 +02:00
tmp105.h
tmp421.c hw/i2c: Use DeviceClass::realize instead of I2CSlaveClass::init 2018-06-01 15:14:31 +02:00
trace-events hw/misc/tz_mpc.c: Honour the BLK_LUT settings in translate 2018-06-22 13:28:40 +01:00
tz-mpc.c hw/misc/tz-mpc: Zero the LUT on initialization, not just reset 2018-07-30 14:52:15 +01:00
tz-ppc.c
unimp.c
vmcoreinfo.c
zynq_slcr.c
zynq-xadc.c