[PATCH v3 1/2] xilink_zynq: Add various missing unimplemented devices

Chao Liu posted 2 patches 1 month, 2 weeks ago
There is a newer version of this series
[PATCH v3 1/2] xilink_zynq: Add various missing unimplemented devices
Posted by Chao Liu 1 month, 2 weeks ago
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
Re: [PATCH v3 1/2] xilink_zynq: Add various missing unimplemented devices
Posted by Peter Maydell 1 month, 2 weeks ago
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