All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3] hw/dma/pl330: Add memory region to replace default
@ 2021-08-16 10:24 Wen, Jianxian
  2021-08-16 10:41 ` Philippe Mathieu-Daudé
  0 siblings, 1 reply; 3+ messages in thread
From: Wen, Jianxian @ 2021-08-16 10:24 UTC (permalink / raw)
  To: peter.maydell, i.mitsyanko, edgar.iglesias, alistair
  Cc: qemu-arm, Liu, Renwei, qemu-devel, Li, Chunming

PL330 needs a memory region which can connect with SMMU IOMMU region to support SMMU translate.

Signed-off-by: Jianxian Wen <jianxian.wen@verisilicon.com>
---
Changes v1 -> v2 (after review of Peter Maydell):
 - Use the dma_memory_read/dma_memory_write functions, update function AddressSpace* parameter.
Changes v2 -> v3 (after review of Philippe Mathieu-Daudé):
 - Refine code to comply with code style, update error message if memory link is not set.

 hw/arm/exynos4210.c  |  3 +++
 hw/arm/xilinx_zynq.c |  3 +++
 hw/dma/pl330.c       | 20 ++++++++++++++++----
 3 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/hw/arm/exynos4210.c b/hw/arm/exynos4210.c
index 5c7a51b..0299e81 100644
--- a/hw/arm/exynos4210.c
+++ b/hw/arm/exynos4210.c
@@ -173,6 +173,9 @@ static DeviceState *pl330_create(uint32_t base, qemu_or_irq *orgate,
     int i;
 
     dev = qdev_new("pl330");
+    object_property_set_link(OBJECT(dev), "memory",
+                             OBJECT(get_system_memory()),
+                             &error_fatal);
     qdev_prop_set_uint8(dev, "num_events", nevents);
     qdev_prop_set_uint8(dev, "num_chnls",  8);
     qdev_prop_set_uint8(dev, "num_periph_req",  nreq);
diff --git a/hw/arm/xilinx_zynq.c b/hw/arm/xilinx_zynq.c
index 245af81..69c333e 100644
--- a/hw/arm/xilinx_zynq.c
+++ b/hw/arm/xilinx_zynq.c
@@ -312,6 +312,9 @@ static void zynq_init(MachineState *machine)
     sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, pic[39-IRQ_OFFSET]);
 
     dev = qdev_new("pl330");
+    object_property_set_link(OBJECT(dev), "memory",
+                             OBJECT(address_space_mem),
+                             &error_fatal);
     qdev_prop_set_uint8(dev, "num_chnls",  8);
     qdev_prop_set_uint8(dev, "num_periph_req",  4);
     qdev_prop_set_uint8(dev, "num_events",  16);
diff --git a/hw/dma/pl330.c b/hw/dma/pl330.c
index 944ba29..c3bd30c 100644
--- a/hw/dma/pl330.c
+++ b/hw/dma/pl330.c
@@ -269,6 +269,9 @@ struct PL330State {
     uint8_t num_faulting;
     uint8_t periph_busy[PL330_PERIPH_NUM];
 
+    /* Memory region that DMA operation access */
+    MemoryRegion *mem_mr;
+    AddressSpace mem_as;
 };
 
 #define TYPE_PL330 "pl330"
@@ -1108,7 +1111,7 @@ static inline const PL330InsnDesc *pl330_fetch_insn(PL330Chan *ch)
     uint8_t opcode;
     int i;
 
-    dma_memory_read(&address_space_memory, ch->pc, &opcode, 1);
+    dma_memory_read(&ch->parent->mem_as, ch->pc, &opcode, 1);
     for (i = 0; insn_desc[i].size; i++) {
         if ((opcode & insn_desc[i].opmask) == insn_desc[i].opcode) {
             return &insn_desc[i];
@@ -1122,7 +1125,7 @@ static inline void pl330_exec_insn(PL330Chan *ch, const PL330InsnDesc *insn)
     uint8_t buf[PL330_INSN_MAXSIZE];
 
     assert(insn->size <= PL330_INSN_MAXSIZE);
-    dma_memory_read(&address_space_memory, ch->pc, buf, insn->size);
+    dma_memory_read(&ch->parent->mem_as, ch->pc, buf, insn->size);
     insn->exec(ch, buf[0], &buf[1], insn->size - 1);
 }
 
@@ -1186,7 +1189,7 @@ static int pl330_exec_cycle(PL330Chan *channel)
     if (q != NULL && q->len <= pl330_fifo_num_free(&s->fifo)) {
         int len = q->len - (q->addr & (q->len - 1));
 
-        dma_memory_read(&address_space_memory, q->addr, buf, len);
+        dma_memory_read(&s->mem_as, q->addr, buf, len);
         trace_pl330_exec_cycle(q->addr, len);
         if (trace_event_get_state_backends(TRACE_PL330_HEXDUMP)) {
             pl330_hexdump(buf, len);
@@ -1217,7 +1220,7 @@ static int pl330_exec_cycle(PL330Chan *channel)
             fifo_res = pl330_fifo_get(&s->fifo, buf, len, q->tag);
         }
         if (fifo_res == PL330_FIFO_OK || q->z) {
-            dma_memory_write(&address_space_memory, q->addr, buf, len);
+            dma_memory_write(&s->mem_as, q->addr, buf, len);
             trace_pl330_exec_cycle(q->addr, len);
             if (trace_event_get_state_backends(TRACE_PL330_HEXDUMP)) {
                 pl330_hexdump(buf, len);
@@ -1562,6 +1565,12 @@ static void pl330_realize(DeviceState *dev, Error **errp)
                           "dma", PL330_IOMEM_SIZE);
     sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->iomem);
 
+    if (!s->mem_mr) {
+        error_setg(errp, "'memory' link is not set");
+        return;
+    }
+    address_space_init(&s->mem_as, s->mem_mr, "pl330");
+
     s->timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, pl330_exec_cycle_timer, s);
 
     s->cfg[0] = (s->mgr_ns_at_rst ? 0x4 : 0) |
@@ -1656,6 +1665,9 @@ static Property pl330_properties[] = {
     DEFINE_PROP_UINT8("rd_q_dep", PL330State, rd_q_dep, 16),
     DEFINE_PROP_UINT16("data_buffer_dep", PL330State, data_buffer_dep, 256),
 
+    DEFINE_PROP_LINK("memory", PL330State, mem_mr,
+                     TYPE_MEMORY_REGION, MemoryRegion *),
+
     DEFINE_PROP_END_OF_LIST(),
 };
 
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v3] hw/dma/pl330: Add memory region to replace default
  2021-08-16 10:24 [PATCH v3] hw/dma/pl330: Add memory region to replace default Wen, Jianxian
@ 2021-08-16 10:41 ` Philippe Mathieu-Daudé
  2021-08-16 10:43   ` Peter Maydell
  0 siblings, 1 reply; 3+ messages in thread
From: Philippe Mathieu-Daudé @ 2021-08-16 10:41 UTC (permalink / raw)
  To: Wen, Jianxian, peter.maydell, i.mitsyanko, edgar.iglesias, alistair
  Cc: qemu-arm, Liu, Renwei, qemu-devel, Li, Chunming

On 8/16/21 12:24 PM, Wen, Jianxian wrote:
> PL330 needs a memory region which can connect with SMMU IOMMU region to support SMMU translate.
> 
> Signed-off-by: Jianxian Wen <jianxian.wen@verisilicon.com>
> ---
> Changes v1 -> v2 (after review of Peter Maydell):
>  - Use the dma_memory_read/dma_memory_write functions, update function AddressSpace* parameter.
> Changes v2 -> v3 (after review of Philippe Mathieu-Daudé):
>  - Refine code to comply with code style, update error message if memory link is not set.
> 
>  hw/arm/exynos4210.c  |  3 +++
>  hw/arm/xilinx_zynq.c |  3 +++
>  hw/dma/pl330.c       | 20 ++++++++++++++++----
>  3 files changed, 22 insertions(+), 4 deletions(-)

> @@ -1562,6 +1565,12 @@ static void pl330_realize(DeviceState *dev, Error **errp)
>                            "dma", PL330_IOMEM_SIZE);
>      sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->iomem);
>  
> +    if (!s->mem_mr) {
> +        error_setg(errp, "'memory' link is not set");
> +        return;
> +    }
> +    address_space_init(&s->mem_as, s->mem_mr, "pl330");

So when multiple controllers are created, this makes the 'info mtree'
output longer, all AS named similarly:

./qemu-system-arm -M smdkc210 -S -monitor stdio
QEMU 6.0.93 monitor - type 'help' for more information
(qemu) info mtree
address-space: memory
  0000000000000000-ffffffffffffffff (prio 0, i/o): system
    0000000000000000-000000000000ffff (prio 0, rom): exynos4210.irom
    0000000002000000-000000000200ffff (prio 0, rom): alias
exynos4210.irom_alias @exynos4210.irom 0000000000000000-000000000000ffff
    0000000002020000-000000000203ffff (prio 0, ram): exynos4210.iram
    0000000005000000-00000000050000ff (prio 0, i/o): lan9118-mmio
    0000000010000000-0000000010000007 (prio 0, i/o): exynos4210.chipid
    0000000010020000-0000000010023d0b (prio 0, i/o): exynos4210.pmu
    0000000010030000-0000000010045103 (prio 0, i/o): exynos4210.clk
    0000000010050000-0000000010050443 (prio 0, i/o): exynos4210-mct
    0000000010070000-00000000100700ff (prio 0, i/o): exynos4210-rtc
    0000000010440000-0000000010440107 (prio 0, i/o): exynos4210-combiner
    0000000010448000-0000000010448107 (prio 0, i/o): exynos4210-combiner
    0000000010480000-000000001048ffff (prio 0, i/o):
exynos4210-cpu-container
      0000000010480000-00000000104800ff (prio 0, i/o): alias
exynos4210-gic-alias_cpu0 @gic_cpu 0000000000000000-00000000000000ff
      0000000010488000-00000000104880ff (prio 0, i/o): alias
exynos4210-gic-alias_cpu1 @gic_cpu 0000000000000000-00000000000000ff
    0000000010490000-000000001049ffff (prio 0, i/o):
exynos4210-dist-container
      0000000010490000-0000000010490fff (prio 0, i/o): alias
exynos4210-gic-alias_dist0 @gic_dist 0000000000000000-0000000000000fff
      0000000010498000-0000000010498fff (prio 0, i/o): alias
exynos4210-gic-alias_dist1 @gic_dist 0000000000000000-0000000000000fff
    0000000010500000-0000000010501fff (prio 0, i/o): a9mp-priv-container
      0000000010500000-00000000105000ff (prio 0, i/o): a9-scu
      0000000010500100-00000000105001ff (prio 0, i/o): gic_cpu
      0000000010500200-000000001050021f (prio 0, i/o): a9gtimer shared
      0000000010500600-000000001050061f (prio 0, i/o): arm_mptimer_timer
      0000000010500620-000000001050063f (prio 0, i/o): arm_mptimer_timer
      0000000010501000-0000000010501fff (prio 0, i/o): gic_dist
    0000000010502000-0000000010502fff (prio 0, i/o): l2x0_cc
    0000000010830400-00000000108305ff (prio 0, i/o): exynos4210.rng
    0000000011c00000-0000000011c04113 (prio 0, i/o): exynos4210.fimd
    0000000012510000-00000000125100ff (prio 0, i/o): sdhci
    0000000012520000-00000000125200ff (prio 0, i/o): sdhci
    0000000012530000-00000000125300ff (prio 0, i/o): sdhci
    0000000012540000-00000000125400ff (prio 0, i/o): sdhci
    0000000012580000-0000000012580fff (prio 0, i/o): ehci
      0000000012580000-000000001258000f (prio 0, i/o): capabilities
      0000000012580010-0000000012580053 (prio 0, i/o): operational
      0000000012580054-000000001258006b (prio 0, i/o): ports
    0000000012680000-0000000012680fff (prio 0, i/o): dma
    0000000012690000-0000000012690fff (prio 0, i/o): dma
    0000000012850000-0000000012850fff (prio 0, i/o): dma
    0000000013800000-000000001380003b (prio 0, i/o): exynos4210.uart
    0000000013810000-000000001381003b (prio 0, i/o): exynos4210.uart
    0000000013820000-000000001382003b (prio 0, i/o): exynos4210.uart
    0000000013830000-000000001383003b (prio 0, i/o): exynos4210.uart
    0000000013860000-0000000013860013 (prio 0, i/o): exynos4210.i2c
    0000000013870000-0000000013870013 (prio 0, i/o): exynos4210.i2c
    0000000013880000-0000000013880013 (prio 0, i/o): exynos4210.i2c
    0000000013890000-0000000013890013 (prio 0, i/o): exynos4210.i2c
    00000000138a0000-00000000138a0013 (prio 0, i/o): exynos4210.i2c
    00000000138b0000-00000000138b0013 (prio 0, i/o): exynos4210.i2c
    00000000138c0000-00000000138c0013 (prio 0, i/o): exynos4210.i2c
    00000000138d0000-00000000138d0013 (prio 0, i/o): exynos4210.i2c
    00000000138e0000-00000000138e0013 (prio 0, i/o): exynos4210.i2c
    00000000139d0000-00000000139d004f (prio 0, i/o): exynos4210-pwm
    0000000040000000-000000007fffffff (prio 0, ram): exynos4210.dram0

address-space: I/O
  0000000000000000-000000000000ffff (prio 0, i/o): io

address-space: cpu-memory-0
  0000000000000000-ffffffffffffffff (prio 0, i/o): system
    0000000000000000-000000000000ffff (prio 0, rom): exynos4210.irom
    0000000002000000-000000000200ffff (prio 0, rom): alias
exynos4210.irom_alias @exynos4210.irom 0000000000000000-000000000000ffff
    0000000002020000-000000000203ffff (prio 0, ram): exynos4210.iram
    0000000005000000-00000000050000ff (prio 0, i/o): lan9118-mmio
    0000000010000000-0000000010000007 (prio 0, i/o): exynos4210.chipid
    0000000010020000-0000000010023d0b (prio 0, i/o): exynos4210.pmu
    0000000010030000-0000000010045103 (prio 0, i/o): exynos4210.clk
    0000000010050000-0000000010050443 (prio 0, i/o): exynos4210-mct
    0000000010070000-00000000100700ff (prio 0, i/o): exynos4210-rtc
    0000000010440000-0000000010440107 (prio 0, i/o): exynos4210-combiner
    0000000010448000-0000000010448107 (prio 0, i/o): exynos4210-combiner
    0000000010480000-000000001048ffff (prio 0, i/o):
exynos4210-cpu-container
      0000000010480000-00000000104800ff (prio 0, i/o): alias
exynos4210-gic-alias_cpu0 @gic_cpu 0000000000000000-00000000000000ff
      0000000010488000-00000000104880ff (prio 0, i/o): alias
exynos4210-gic-alias_cpu1 @gic_cpu 0000000000000000-00000000000000ff
    0000000010490000-000000001049ffff (prio 0, i/o):
exynos4210-dist-container
      0000000010490000-0000000010490fff (prio 0, i/o): alias
exynos4210-gic-alias_dist0 @gic_dist 0000000000000000-0000000000000fff
      0000000010498000-0000000010498fff (prio 0, i/o): alias
exynos4210-gic-alias_dist1 @gic_dist 0000000000000000-0000000000000fff
    0000000010500000-0000000010501fff (prio 0, i/o): a9mp-priv-container
      0000000010500000-00000000105000ff (prio 0, i/o): a9-scu
      0000000010500100-00000000105001ff (prio 0, i/o): gic_cpu
      0000000010500200-000000001050021f (prio 0, i/o): a9gtimer shared
      0000000010500600-000000001050061f (prio 0, i/o): arm_mptimer_timer
      0000000010500620-000000001050063f (prio 0, i/o): arm_mptimer_timer
      0000000010501000-0000000010501fff (prio 0, i/o): gic_dist
    0000000010502000-0000000010502fff (prio 0, i/o): l2x0_cc
    0000000010830400-00000000108305ff (prio 0, i/o): exynos4210.rng
    0000000011c00000-0000000011c04113 (prio 0, i/o): exynos4210.fimd
    0000000012510000-00000000125100ff (prio 0, i/o): sdhci
    0000000012520000-00000000125200ff (prio 0, i/o): sdhci
    0000000012530000-00000000125300ff (prio 0, i/o): sdhci
    0000000012540000-00000000125400ff (prio 0, i/o): sdhci
    0000000012580000-0000000012580fff (prio 0, i/o): ehci
      0000000012580000-000000001258000f (prio 0, i/o): capabilities
      0000000012580010-0000000012580053 (prio 0, i/o): operational
      0000000012580054-000000001258006b (prio 0, i/o): ports
    0000000012680000-0000000012680fff (prio 0, i/o): dma
    0000000012690000-0000000012690fff (prio 0, i/o): dma
    0000000012850000-0000000012850fff (prio 0, i/o): dma
    0000000013800000-000000001380003b (prio 0, i/o): exynos4210.uart
    0000000013810000-000000001381003b (prio 0, i/o): exynos4210.uart
    0000000013820000-000000001382003b (prio 0, i/o): exynos4210.uart
    0000000013830000-000000001383003b (prio 0, i/o): exynos4210.uart
    0000000013860000-0000000013860013 (prio 0, i/o): exynos4210.i2c
    0000000013870000-0000000013870013 (prio 0, i/o): exynos4210.i2c
    0000000013880000-0000000013880013 (prio 0, i/o): exynos4210.i2c
    0000000013890000-0000000013890013 (prio 0, i/o): exynos4210.i2c
    00000000138a0000-00000000138a0013 (prio 0, i/o): exynos4210.i2c
    00000000138b0000-00000000138b0013 (prio 0, i/o): exynos4210.i2c
    00000000138c0000-00000000138c0013 (prio 0, i/o): exynos4210.i2c
    00000000138d0000-00000000138d0013 (prio 0, i/o): exynos4210.i2c
    00000000138e0000-00000000138e0013 (prio 0, i/o): exynos4210.i2c
    00000000139d0000-00000000139d004f (prio 0, i/o): exynos4210-pwm
    0000000040000000-000000007fffffff (prio 0, ram): exynos4210.dram0

address-space: cpu-memory-1
  0000000000000000-ffffffffffffffff (prio 0, i/o): system
    0000000000000000-000000000000ffff (prio 0, rom): exynos4210.irom
    0000000002000000-000000000200ffff (prio 0, rom): alias
exynos4210.irom_alias @exynos4210.irom 0000000000000000-000000000000ffff
    0000000002020000-000000000203ffff (prio 0, ram): exynos4210.iram
    0000000005000000-00000000050000ff (prio 0, i/o): lan9118-mmio
    0000000010000000-0000000010000007 (prio 0, i/o): exynos4210.chipid
    0000000010020000-0000000010023d0b (prio 0, i/o): exynos4210.pmu
    0000000010030000-0000000010045103 (prio 0, i/o): exynos4210.clk
    0000000010050000-0000000010050443 (prio 0, i/o): exynos4210-mct
    0000000010070000-00000000100700ff (prio 0, i/o): exynos4210-rtc
    0000000010440000-0000000010440107 (prio 0, i/o): exynos4210-combiner
    0000000010448000-0000000010448107 (prio 0, i/o): exynos4210-combiner
    0000000010480000-000000001048ffff (prio 0, i/o):
exynos4210-cpu-container
      0000000010480000-00000000104800ff (prio 0, i/o): alias
exynos4210-gic-alias_cpu0 @gic_cpu 0000000000000000-00000000000000ff
      0000000010488000-00000000104880ff (prio 0, i/o): alias
exynos4210-gic-alias_cpu1 @gic_cpu 0000000000000000-00000000000000ff
    0000000010490000-000000001049ffff (prio 0, i/o):
exynos4210-dist-container
      0000000010490000-0000000010490fff (prio 0, i/o): alias
exynos4210-gic-alias_dist0 @gic_dist 0000000000000000-0000000000000fff
      0000000010498000-0000000010498fff (prio 0, i/o): alias
exynos4210-gic-alias_dist1 @gic_dist 0000000000000000-0000000000000fff
    0000000010500000-0000000010501fff (prio 0, i/o): a9mp-priv-container
      0000000010500000-00000000105000ff (prio 0, i/o): a9-scu
      0000000010500100-00000000105001ff (prio 0, i/o): gic_cpu
      0000000010500200-000000001050021f (prio 0, i/o): a9gtimer shared
      0000000010500600-000000001050061f (prio 0, i/o): arm_mptimer_timer
      0000000010500620-000000001050063f (prio 0, i/o): arm_mptimer_timer
      0000000010501000-0000000010501fff (prio 0, i/o): gic_dist
    0000000010502000-0000000010502fff (prio 0, i/o): l2x0_cc
    0000000010830400-00000000108305ff (prio 0, i/o): exynos4210.rng
    0000000011c00000-0000000011c04113 (prio 0, i/o): exynos4210.fimd
    0000000012510000-00000000125100ff (prio 0, i/o): sdhci
    0000000012520000-00000000125200ff (prio 0, i/o): sdhci
    0000000012530000-00000000125300ff (prio 0, i/o): sdhci
    0000000012540000-00000000125400ff (prio 0, i/o): sdhci
    0000000012580000-0000000012580fff (prio 0, i/o): ehci
      0000000012580000-000000001258000f (prio 0, i/o): capabilities
      0000000012580010-0000000012580053 (prio 0, i/o): operational
      0000000012580054-000000001258006b (prio 0, i/o): ports
    0000000012680000-0000000012680fff (prio 0, i/o): dma
    0000000012690000-0000000012690fff (prio 0, i/o): dma
    0000000012850000-0000000012850fff (prio 0, i/o): dma
    0000000013800000-000000001380003b (prio 0, i/o): exynos4210.uart
    0000000013810000-000000001381003b (prio 0, i/o): exynos4210.uart
    0000000013820000-000000001382003b (prio 0, i/o): exynos4210.uart
    0000000013830000-000000001383003b (prio 0, i/o): exynos4210.uart
    0000000013860000-0000000013860013 (prio 0, i/o): exynos4210.i2c
    0000000013870000-0000000013870013 (prio 0, i/o): exynos4210.i2c
    0000000013880000-0000000013880013 (prio 0, i/o): exynos4210.i2c
    0000000013890000-0000000013890013 (prio 0, i/o): exynos4210.i2c
    00000000138a0000-00000000138a0013 (prio 0, i/o): exynos4210.i2c
    00000000138b0000-00000000138b0013 (prio 0, i/o): exynos4210.i2c
    00000000138c0000-00000000138c0013 (prio 0, i/o): exynos4210.i2c
    00000000138d0000-00000000138d0013 (prio 0, i/o): exynos4210.i2c
    00000000138e0000-00000000138e0013 (prio 0, i/o): exynos4210.i2c
    00000000139d0000-00000000139d004f (prio 0, i/o): exynos4210-pwm
    0000000040000000-000000007fffffff (prio 0, ram): exynos4210.dram0

address-space: pl330
  0000000000000000-ffffffffffffffff (prio 0, i/o): system
    0000000000000000-000000000000ffff (prio 0, rom): exynos4210.irom
    0000000002000000-000000000200ffff (prio 0, rom): alias
exynos4210.irom_alias @exynos4210.irom 0000000000000000-000000000000ffff
    0000000002020000-000000000203ffff (prio 0, ram): exynos4210.iram
    0000000005000000-00000000050000ff (prio 0, i/o): lan9118-mmio
    0000000010000000-0000000010000007 (prio 0, i/o): exynos4210.chipid
    0000000010020000-0000000010023d0b (prio 0, i/o): exynos4210.pmu
    0000000010030000-0000000010045103 (prio 0, i/o): exynos4210.clk
    0000000010050000-0000000010050443 (prio 0, i/o): exynos4210-mct
    0000000010070000-00000000100700ff (prio 0, i/o): exynos4210-rtc
    0000000010440000-0000000010440107 (prio 0, i/o): exynos4210-combiner
    0000000010448000-0000000010448107 (prio 0, i/o): exynos4210-combiner
    0000000010480000-000000001048ffff (prio 0, i/o):
exynos4210-cpu-container
      0000000010480000-00000000104800ff (prio 0, i/o): alias
exynos4210-gic-alias_cpu0 @gic_cpu 0000000000000000-00000000000000ff
      0000000010488000-00000000104880ff (prio 0, i/o): alias
exynos4210-gic-alias_cpu1 @gic_cpu 0000000000000000-00000000000000ff
    0000000010490000-000000001049ffff (prio 0, i/o):
exynos4210-dist-container
      0000000010490000-0000000010490fff (prio 0, i/o): alias
exynos4210-gic-alias_dist0 @gic_dist 0000000000000000-0000000000000fff
      0000000010498000-0000000010498fff (prio 0, i/o): alias
exynos4210-gic-alias_dist1 @gic_dist 0000000000000000-0000000000000fff
    0000000010500000-0000000010501fff (prio 0, i/o): a9mp-priv-container
      0000000010500000-00000000105000ff (prio 0, i/o): a9-scu
      0000000010500100-00000000105001ff (prio 0, i/o): gic_cpu
      0000000010500200-000000001050021f (prio 0, i/o): a9gtimer shared
      0000000010500600-000000001050061f (prio 0, i/o): arm_mptimer_timer
      0000000010500620-000000001050063f (prio 0, i/o): arm_mptimer_timer
      0000000010501000-0000000010501fff (prio 0, i/o): gic_dist
    0000000010502000-0000000010502fff (prio 0, i/o): l2x0_cc
    0000000010830400-00000000108305ff (prio 0, i/o): exynos4210.rng
    0000000011c00000-0000000011c04113 (prio 0, i/o): exynos4210.fimd
    0000000012510000-00000000125100ff (prio 0, i/o): sdhci
    0000000012520000-00000000125200ff (prio 0, i/o): sdhci
    0000000012530000-00000000125300ff (prio 0, i/o): sdhci
    0000000012540000-00000000125400ff (prio 0, i/o): sdhci
    0000000012580000-0000000012580fff (prio 0, i/o): ehci
      0000000012580000-000000001258000f (prio 0, i/o): capabilities
      0000000012580010-0000000012580053 (prio 0, i/o): operational
      0000000012580054-000000001258006b (prio 0, i/o): ports
    0000000012680000-0000000012680fff (prio 0, i/o): dma
    0000000012690000-0000000012690fff (prio 0, i/o): dma
    0000000012850000-0000000012850fff (prio 0, i/o): dma
    0000000013800000-000000001380003b (prio 0, i/o): exynos4210.uart
    0000000013810000-000000001381003b (prio 0, i/o): exynos4210.uart
    0000000013820000-000000001382003b (prio 0, i/o): exynos4210.uart
    0000000013830000-000000001383003b (prio 0, i/o): exynos4210.uart
    0000000013860000-0000000013860013 (prio 0, i/o): exynos4210.i2c
    0000000013870000-0000000013870013 (prio 0, i/o): exynos4210.i2c
    0000000013880000-0000000013880013 (prio 0, i/o): exynos4210.i2c
    0000000013890000-0000000013890013 (prio 0, i/o): exynos4210.i2c
    00000000138a0000-00000000138a0013 (prio 0, i/o): exynos4210.i2c
    00000000138b0000-00000000138b0013 (prio 0, i/o): exynos4210.i2c
    00000000138c0000-00000000138c0013 (prio 0, i/o): exynos4210.i2c
    00000000138d0000-00000000138d0013 (prio 0, i/o): exynos4210.i2c
    00000000138e0000-00000000138e0013 (prio 0, i/o): exynos4210.i2c
    00000000139d0000-00000000139d004f (prio 0, i/o): exynos4210-pwm
    0000000040000000-000000007fffffff (prio 0, ram): exynos4210.dram0

address-space: pl330
  0000000000000000-ffffffffffffffff (prio 0, i/o): system
    0000000000000000-000000000000ffff (prio 0, rom): exynos4210.irom
    0000000002000000-000000000200ffff (prio 0, rom): alias
exynos4210.irom_alias @exynos4210.irom 0000000000000000-000000000000ffff
    0000000002020000-000000000203ffff (prio 0, ram): exynos4210.iram
    0000000005000000-00000000050000ff (prio 0, i/o): lan9118-mmio
    0000000010000000-0000000010000007 (prio 0, i/o): exynos4210.chipid
    0000000010020000-0000000010023d0b (prio 0, i/o): exynos4210.pmu
    0000000010030000-0000000010045103 (prio 0, i/o): exynos4210.clk
    0000000010050000-0000000010050443 (prio 0, i/o): exynos4210-mct
    0000000010070000-00000000100700ff (prio 0, i/o): exynos4210-rtc
    0000000010440000-0000000010440107 (prio 0, i/o): exynos4210-combiner
    0000000010448000-0000000010448107 (prio 0, i/o): exynos4210-combiner
    0000000010480000-000000001048ffff (prio 0, i/o):
exynos4210-cpu-container
      0000000010480000-00000000104800ff (prio 0, i/o): alias
exynos4210-gic-alias_cpu0 @gic_cpu 0000000000000000-00000000000000ff
      0000000010488000-00000000104880ff (prio 0, i/o): alias
exynos4210-gic-alias_cpu1 @gic_cpu 0000000000000000-00000000000000ff
    0000000010490000-000000001049ffff (prio 0, i/o):
exynos4210-dist-container
      0000000010490000-0000000010490fff (prio 0, i/o): alias
exynos4210-gic-alias_dist0 @gic_dist 0000000000000000-0000000000000fff
      0000000010498000-0000000010498fff (prio 0, i/o): alias
exynos4210-gic-alias_dist1 @gic_dist 0000000000000000-0000000000000fff
    0000000010500000-0000000010501fff (prio 0, i/o): a9mp-priv-container
      0000000010500000-00000000105000ff (prio 0, i/o): a9-scu
      0000000010500100-00000000105001ff (prio 0, i/o): gic_cpu
      0000000010500200-000000001050021f (prio 0, i/o): a9gtimer shared
      0000000010500600-000000001050061f (prio 0, i/o): arm_mptimer_timer
      0000000010500620-000000001050063f (prio 0, i/o): arm_mptimer_timer
      0000000010501000-0000000010501fff (prio 0, i/o): gic_dist
    0000000010502000-0000000010502fff (prio 0, i/o): l2x0_cc
    0000000010830400-00000000108305ff (prio 0, i/o): exynos4210.rng
    0000000011c00000-0000000011c04113 (prio 0, i/o): exynos4210.fimd
    0000000012510000-00000000125100ff (prio 0, i/o): sdhci
    0000000012520000-00000000125200ff (prio 0, i/o): sdhci
    0000000012530000-00000000125300ff (prio 0, i/o): sdhci
    0000000012540000-00000000125400ff (prio 0, i/o): sdhci
    0000000012580000-0000000012580fff (prio 0, i/o): ehci
      0000000012580000-000000001258000f (prio 0, i/o): capabilities
      0000000012580010-0000000012580053 (prio 0, i/o): operational
      0000000012580054-000000001258006b (prio 0, i/o): ports
    0000000012680000-0000000012680fff (prio 0, i/o): dma
    0000000012690000-0000000012690fff (prio 0, i/o): dma
    0000000012850000-0000000012850fff (prio 0, i/o): dma
    0000000013800000-000000001380003b (prio 0, i/o): exynos4210.uart
    0000000013810000-000000001381003b (prio 0, i/o): exynos4210.uart
    0000000013820000-000000001382003b (prio 0, i/o): exynos4210.uart
    0000000013830000-000000001383003b (prio 0, i/o): exynos4210.uart
    0000000013860000-0000000013860013 (prio 0, i/o): exynos4210.i2c
    0000000013870000-0000000013870013 (prio 0, i/o): exynos4210.i2c
    0000000013880000-0000000013880013 (prio 0, i/o): exynos4210.i2c
    0000000013890000-0000000013890013 (prio 0, i/o): exynos4210.i2c
    00000000138a0000-00000000138a0013 (prio 0, i/o): exynos4210.i2c
    00000000138b0000-00000000138b0013 (prio 0, i/o): exynos4210.i2c
    00000000138c0000-00000000138c0013 (prio 0, i/o): exynos4210.i2c
    00000000138d0000-00000000138d0013 (prio 0, i/o): exynos4210.i2c
    00000000138e0000-00000000138e0013 (prio 0, i/o): exynos4210.i2c
    00000000139d0000-00000000139d004f (prio 0, i/o): exynos4210-pwm
    0000000040000000-000000007fffffff (prio 0, ram): exynos4210.dram0

address-space: pl330
  0000000000000000-ffffffffffffffff (prio 0, i/o): system
    0000000000000000-000000000000ffff (prio 0, rom): exynos4210.irom
    0000000002000000-000000000200ffff (prio 0, rom): alias
exynos4210.irom_alias @exynos4210.irom 0000000000000000-000000000000ffff
    0000000002020000-000000000203ffff (prio 0, ram): exynos4210.iram
    0000000005000000-00000000050000ff (prio 0, i/o): lan9118-mmio
    0000000010000000-0000000010000007 (prio 0, i/o): exynos4210.chipid
    0000000010020000-0000000010023d0b (prio 0, i/o): exynos4210.pmu
    0000000010030000-0000000010045103 (prio 0, i/o): exynos4210.clk
    0000000010050000-0000000010050443 (prio 0, i/o): exynos4210-mct
    0000000010070000-00000000100700ff (prio 0, i/o): exynos4210-rtc
    0000000010440000-0000000010440107 (prio 0, i/o): exynos4210-combiner
    0000000010448000-0000000010448107 (prio 0, i/o): exynos4210-combiner
    0000000010480000-000000001048ffff (prio 0, i/o):
exynos4210-cpu-container
      0000000010480000-00000000104800ff (prio 0, i/o): alias
exynos4210-gic-alias_cpu0 @gic_cpu 0000000000000000-00000000000000ff
      0000000010488000-00000000104880ff (prio 0, i/o): alias
exynos4210-gic-alias_cpu1 @gic_cpu 0000000000000000-00000000000000ff
    0000000010490000-000000001049ffff (prio 0, i/o):
exynos4210-dist-container
      0000000010490000-0000000010490fff (prio 0, i/o): alias
exynos4210-gic-alias_dist0 @gic_dist 0000000000000000-0000000000000fff
      0000000010498000-0000000010498fff (prio 0, i/o): alias
exynos4210-gic-alias_dist1 @gic_dist 0000000000000000-0000000000000fff
    0000000010500000-0000000010501fff (prio 0, i/o): a9mp-priv-container
      0000000010500000-00000000105000ff (prio 0, i/o): a9-scu
      0000000010500100-00000000105001ff (prio 0, i/o): gic_cpu
      0000000010500200-000000001050021f (prio 0, i/o): a9gtimer shared
      0000000010500600-000000001050061f (prio 0, i/o): arm_mptimer_timer
      0000000010500620-000000001050063f (prio 0, i/o): arm_mptimer_timer
      0000000010501000-0000000010501fff (prio 0, i/o): gic_dist
    0000000010502000-0000000010502fff (prio 0, i/o): l2x0_cc
    0000000010830400-00000000108305ff (prio 0, i/o): exynos4210.rng
    0000000011c00000-0000000011c04113 (prio 0, i/o): exynos4210.fimd
    0000000012510000-00000000125100ff (prio 0, i/o): sdhci
    0000000012520000-00000000125200ff (prio 0, i/o): sdhci
    0000000012530000-00000000125300ff (prio 0, i/o): sdhci
    0000000012540000-00000000125400ff (prio 0, i/o): sdhci
    0000000012580000-0000000012580fff (prio 0, i/o): ehci
      0000000012580000-000000001258000f (prio 0, i/o): capabilities
      0000000012580010-0000000012580053 (prio 0, i/o): operational
      0000000012580054-000000001258006b (prio 0, i/o): ports
    0000000012680000-0000000012680fff (prio 0, i/o): dma
    0000000012690000-0000000012690fff (prio 0, i/o): dma
    0000000012850000-0000000012850fff (prio 0, i/o): dma
    0000000013800000-000000001380003b (prio 0, i/o): exynos4210.uart
    0000000013810000-000000001381003b (prio 0, i/o): exynos4210.uart
    0000000013820000-000000001382003b (prio 0, i/o): exynos4210.uart
    0000000013830000-000000001383003b (prio 0, i/o): exynos4210.uart
    0000000013860000-0000000013860013 (prio 0, i/o): exynos4210.i2c
    0000000013870000-0000000013870013 (prio 0, i/o): exynos4210.i2c
    0000000013880000-0000000013880013 (prio 0, i/o): exynos4210.i2c
    0000000013890000-0000000013890013 (prio 0, i/o): exynos4210.i2c
    00000000138a0000-00000000138a0013 (prio 0, i/o): exynos4210.i2c
    00000000138b0000-00000000138b0013 (prio 0, i/o): exynos4210.i2c
    00000000138c0000-00000000138c0013 (prio 0, i/o): exynos4210.i2c
    00000000138d0000-00000000138d0013 (prio 0, i/o): exynos4210.i2c
    00000000138e0000-00000000138e0013 (prio 0, i/o): exynos4210.i2c
    00000000139d0000-00000000139d004f (prio 0, i/o): exynos4210-pwm
    0000000040000000-000000007fffffff (prio 0, ram): exynos4210.dram0

memory-region: exynos4210.irom
  0000000000000000-000000000000ffff (prio 0, rom): exynos4210.irom

memory-region: gic_cpu
  0000000000000000-00000000000000ff (prio 0, i/o): gic_cpu

memory-region: gic_dist
  0000000000000000-0000000000000fff (prio 0, i/o): gic_dist

(qemu) info mtree -f
FlatView #0
 AS "I/O", root: io
 Root memory region: io
  0000000000000000-000000000000ffff (prio 0, i/o): io

FlatView #1
 AS "memory", root: system
 AS "cpu-memory-0", root: system
 AS "cpu-memory-1", root: system
 AS "pl330", root: system
 AS "pl330", root: system
 AS "pl330", root: system
 Root memory region: system
  0000000000000000-000000000000ffff (prio 0, rom): exynos4210.irom
  0000000002000000-000000000200ffff (prio 0, rom): exynos4210.irom
  0000000002020000-000000000203ffff (prio 0, ram): exynos4210.iram
  0000000005000000-00000000050000ff (prio 0, i/o): lan9118-mmio
  0000000010000000-0000000010000007 (prio 0, i/o): exynos4210.chipid
  0000000010020000-0000000010023d0b (prio 0, i/o): exynos4210.pmu
  0000000010030000-0000000010045103 (prio 0, i/o): exynos4210.clk
  0000000010050000-0000000010050443 (prio 0, i/o): exynos4210-mct
  0000000010070000-00000000100700ff (prio 0, i/o): exynos4210-rtc
  0000000010440000-0000000010440107 (prio 0, i/o): exynos4210-combiner
  0000000010448000-0000000010448107 (prio 0, i/o): exynos4210-combiner
  0000000010480000-00000000104800ff (prio 0, i/o): gic_cpu
  0000000010488000-00000000104880ff (prio 0, i/o): gic_cpu
  0000000010490000-0000000010490fff (prio 0, i/o): gic_dist
  0000000010498000-0000000010498fff (prio 0, i/o): gic_dist
  0000000010500000-00000000105000ff (prio 0, i/o): a9-scu
  0000000010500100-00000000105001ff (prio 0, i/o): gic_cpu
  0000000010500200-000000001050021f (prio 0, i/o): a9gtimer shared
  0000000010500600-000000001050061f (prio 0, i/o): arm_mptimer_timer
  0000000010500620-000000001050063f (prio 0, i/o): arm_mptimer_timer
  0000000010501000-0000000010501fff (prio 0, i/o): gic_dist
  0000000010502000-0000000010502fff (prio 0, i/o): l2x0_cc
  0000000010830400-00000000108305ff (prio 0, i/o): exynos4210.rng
  0000000011c00000-0000000011c04113 (prio 0, i/o): exynos4210.fimd
  0000000012510000-00000000125100ff (prio 0, i/o): sdhci
  0000000012520000-00000000125200ff (prio 0, i/o): sdhci
  0000000012530000-00000000125300ff (prio 0, i/o): sdhci
  0000000012540000-00000000125400ff (prio 0, i/o): sdhci
  0000000012580000-000000001258000f (prio 0, i/o): capabilities
  0000000012580010-0000000012580053 (prio 0, i/o): operational
  0000000012580054-000000001258006b (prio 0, i/o): ports
  0000000012680000-0000000012680fff (prio 0, i/o): dma
  0000000012690000-0000000012690fff (prio 0, i/o): dma
  0000000012850000-0000000012850fff (prio 0, i/o): dma
  0000000013800000-000000001380003b (prio 0, i/o): exynos4210.uart
  0000000013810000-000000001381003b (prio 0, i/o): exynos4210.uart
  0000000013820000-000000001382003b (prio 0, i/o): exynos4210.uart
  0000000013830000-000000001383003b (prio 0, i/o): exynos4210.uart
  0000000013860000-0000000013860013 (prio 0, i/o): exynos4210.i2c
  0000000013870000-0000000013870013 (prio 0, i/o): exynos4210.i2c
  0000000013880000-0000000013880013 (prio 0, i/o): exynos4210.i2c
  0000000013890000-0000000013890013 (prio 0, i/o): exynos4210.i2c
  00000000138a0000-00000000138a0013 (prio 0, i/o): exynos4210.i2c
  00000000138b0000-00000000138b0013 (prio 0, i/o): exynos4210.i2c
  00000000138c0000-00000000138c0013 (prio 0, i/o): exynos4210.i2c
  00000000138d0000-00000000138d0013 (prio 0, i/o): exynos4210.i2c
  00000000138e0000-00000000138e0013 (prio 0, i/o): exynos4210.i2c
  00000000139d0000-00000000139d004f (prio 0, i/o): exynos4210-pwm
  0000000040000000-000000007fffffff (prio 0, ram): exynos4210.dram0

'info mtree' is mostly for debugging, what matters is the flatview,
so no need to make the controller model more complex by adding an
'id' property (which would be useful for trace event btw).

AS are not QOM so we can not pass them via link property,
we have to use MR for that. So not much room to improve.

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH v3] hw/dma/pl330: Add memory region to replace default
  2021-08-16 10:41 ` Philippe Mathieu-Daudé
@ 2021-08-16 10:43   ` Peter Maydell
  0 siblings, 0 replies; 3+ messages in thread
From: Peter Maydell @ 2021-08-16 10:43 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé
  Cc: Liu, Renwei, Li, Chunming, i.mitsyanko, alistair, Wen, Jianxian,
	qemu-devel, qemu-arm, edgar.iglesias

On Mon, 16 Aug 2021 at 11:41, Philippe Mathieu-Daudé <f4bug@amsat.org> wrote:

> So when multiple controllers are created, this makes the 'info mtree'
> output longer, all AS named similarly:

I think this is a problem with 'info mtree' to some extent -- it
was designed on the assumption that there's really only one or two
interesting address spaces, and with more recent developments that's
just not the case any more.

-- PMM


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-08-16 10:45 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-16 10:24 [PATCH v3] hw/dma/pl330: Add memory region to replace default Wen, Jianxian
2021-08-16 10:41 ` Philippe Mathieu-Daudé
2021-08-16 10:43   ` Peter Maydell

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.