Add xilinx zynq board memory mapping is implemented in the device.
Remove a ignore_memory_transaction_failures concurrently.
Source: Zynq-7000 SoC Data Sheet: Overview, Chapter: Memory Map
See: https://www.mouser.com/datasheet/2/903/ds190_Zynq_7000_Overview-1595492.pdf
Signed-off-by: Chao Liu <chao.liu@yeah.net>
---
hw/arm/xilinx_zynq.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/hw/arm/xilinx_zynq.c b/hw/arm/xilinx_zynq.c
index 37c234f5ab..77010bebeb 100644
--- a/hw/arm/xilinx_zynq.c
+++ b/hw/arm/xilinx_zynq.c
@@ -34,6 +34,7 @@
#include "hw/net/cadence_gem.h"
#include "hw/cpu/a9mpcore.h"
#include "hw/qdev-clock.h"
+#include "hw/misc/unimp.h"
#include "sysemu/reset.h"
#include "qom/object.h"
#include "exec/tswap.h"
@@ -229,6 +230,16 @@ static void zynq_init(MachineState *machine)
zynq_machine->cpu[n] = ARM_CPU(cpuobj);
}
+ /* PL AXI */
+ create_unimplemented_device("zynq.pl-axi.port0", 0x40000000, 1 * GiB);
+ create_unimplemented_device("zynq.pl-axi.port1", 0x80000000, 1 * GiB);
+
+ /* IOP devices */
+ create_unimplemented_device("zynq.iop-devices", 0xE0000000, 256 * MiB);
+
+ /* Programmable register access via AMBA APB bus */
+ create_unimplemented_device("zynq.amba", 0xF8000000, 32 * MiB);
+
/* DDR remapped to address zero. */
memory_region_add_subregion(address_space_mem, 0, machine->ram);
@@ -394,7 +405,6 @@ static void zynq_machine_class_init(ObjectClass *oc, void *data)
mc->init = zynq_init;
mc->max_cpus = ZYNQ_MAX_CPUS;
mc->no_sdcard = 1;
- mc->ignore_memory_transaction_failures = true;
mc->valid_cpu_types = valid_cpu_types;
mc->default_ram_id = "zynq.ext_ram";
prop = object_class_property_add_str(oc, "boot-mode", NULL,
--
2.46.1
On Sat, 5 Oct 2024 at 17:06, Chao Liu <chao.liu@yeah.net> wrote: > > Add xilinx zynq board memory mapping is implemented in the device. > > Remove a ignore_memory_transaction_failures concurrently. > > Source: Zynq-7000 SoC Data Sheet: Overview, Chapter: Memory Map > > See: https://www.mouser.com/datasheet/2/903/ds190_Zynq_7000_Overview-1595492.pdf > Signed-off-by: Chao Liu <chao.liu@yeah.net> > --- > hw/arm/xilinx_zynq.c | 12 +++++++++++- > 1 file changed, 11 insertions(+), 1 deletion(-) > > diff --git a/hw/arm/xilinx_zynq.c b/hw/arm/xilinx_zynq.c > index 37c234f5ab..77010bebeb 100644 > --- a/hw/arm/xilinx_zynq.c > +++ b/hw/arm/xilinx_zynq.c > @@ -34,6 +34,7 @@ > #include "hw/net/cadence_gem.h" > #include "hw/cpu/a9mpcore.h" > #include "hw/qdev-clock.h" > +#include "hw/misc/unimp.h" > #include "sysemu/reset.h" > #include "qom/object.h" > #include "exec/tswap.h" > @@ -229,6 +230,16 @@ static void zynq_init(MachineState *machine) > zynq_machine->cpu[n] = ARM_CPU(cpuobj); > } > > + /* PL AXI */ > + create_unimplemented_device("zynq.pl-axi.port0", 0x40000000, 1 * GiB); > + create_unimplemented_device("zynq.pl-axi.port1", 0x80000000, 1 * GiB); > + > + /* IOP devices */ > + create_unimplemented_device("zynq.iop-devices", 0xE0000000, 256 * MiB); These clearly are not devices, they are covering a big range of memory space. What is the behaviour of the real hardware if you access these address space ranges? > + /* Programmable register access via AMBA APB bus */ > + create_unimplemented_device("zynq.amba", 0xF8000000, 32 * MiB); > + > /* DDR remapped to address zero. */ > memory_region_add_subregion(address_space_mem, 0, machine->ram); > > @@ -394,7 +405,6 @@ static void zynq_machine_class_init(ObjectClass *oc, void *data) > mc->init = zynq_init; > mc->max_cpus = ZYNQ_MAX_CPUS; > mc->no_sdcard = 1; > - mc->ignore_memory_transaction_failures = true; As I've said in my review on the previous series, there is no point in adding big "unimplemented device" ranges merely in order to remove the setting of ignore_memory_transaction_failures. thanks -- PMM
© 2016 - 2024 Red Hat, Inc.