[RFC PATCH] hw/misc: make the tz-ppc-port names more useful

Alex Bennée posted 1 patch 1 month, 3 weeks ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20251215170548.2594651-1-alex.bennee@linaro.org
Maintainers: Peter Maydell <peter.maydell@linaro.org>
hw/misc/tz-ppc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[RFC PATCH] hw/misc: make the tz-ppc-port names more useful
Posted by Alex Bennée 1 month, 3 weeks ago
The TrustZone peripheral protection controller (tz-ppc) sits between
peripherals and the main system. However this results in "info mtree"
looking at bit confusing, especially as the sequence numbers can
overlap and miss steps:

      0000000000000000-ffffffffffffffff (prio -2, i/o): system
        0000000000000000-00000000003fffff (prio 0, i/o): tz-mpc-upstream
        0000000000400000-00000000007fffff (prio 0, i/o): alias ssram-0-alias @tz-mpc-upstream 0000000000000000-00000000003fffff
        0000000028000000-00000000281fffff (prio 0, i/o): tz-mpc-upstream
        0000000028200000-00000000283fffff (prio 0, i/o): tz-mpc-upstream
        0000000040080000-0000000040080fff (prio 0, i/o): iotkit-secctl-ns-regs
        0000000040100000-0000000040100fff (prio 0, i/o): tz-ppc-port[1]
        0000000040101000-0000000040101fff (prio 0, i/o): tz-ppc-port[2]
        0000000040102000-0000000040102fff (prio 0, i/o): tz-ppc-port[3]
        0000000040103000-0000000040103fff (prio 0, i/o): tz-ppc-port[4]
        0000000040110000-0000000040110fff (prio 0, i/o): tz-ppc-port[0]
        0000000040111000-0000000040111fff (prio 0, i/o): tz-ppc-port[1]
        0000000040112000-0000000040112fff (prio 0, i/o): tz-ppc-port[2]
        0000000040113000-0000000040113fff (prio 0, i/o): tz-ppc-port[3]
        0000000040200000-0000000040200fff (prio 0, i/o): tz-ppc-port[5]
        0000000040201000-0000000040201fff (prio 0, i/o): tz-ppc-port[6]
        0000000040202000-0000000040202fff (prio 0, i/o): tz-ppc-port[7]
        0000000040203000-0000000040203fff (prio 0, i/o): tz-ppc-port[8]
        0000000040204000-0000000040204fff (prio 0, i/o): tz-ppc-port[9]
        0000000040205000-0000000040205fff (prio 0, i/o): tz-ppc-port[0]
        0000000040206000-0000000040206fff (prio 0, i/o): tz-ppc-port[1]
        0000000040207000-0000000040207fff (prio 0, i/o): tz-ppc-port[10]
        0000000040208000-0000000040208fff (prio 0, i/o): tz-ppc-port[11]
        0000000040209000-0000000040209fff (prio 0, i/o): tz-ppc-port[2]
        000000004020a000-000000004020afff (prio 0, i/o): tz-ppc-port[3]
        000000004020b000-000000004020bfff (prio 0, i/o): tz-ppc-port[4]
        000000004020c000-000000004020cfff (prio 0, i/o): tz-ppc-port[12]
        000000004020d000-000000004020dfff (prio 0, i/o): tz-ppc-port[13]
        0000000040300000-0000000040300fff (prio 0, i/o): tz-ppc-port[0]
        0000000040301000-0000000040301fff (prio 0, i/o): tz-ppc-port[1]
        0000000040302000-0000000040302fff (prio 0, i/o): tz-ppc-port[2]
        0000000041000000-000000004113ffff (prio 0, i/o): tz-ppc-port[0]
        0000000042000000-00000000420000ff (prio 0, i/o): tz-ppc-port[5]
        0000000048007000-0000000048007fff (prio -1000, i/o): FPGA NS PC
        0000000050080000-0000000050080fff (prio 0, i/o): iotkit-secctl-s-regs
        0000000058007000-0000000058007fff (prio 0, i/o): tz-ppc-port[0]
        0000000058008000-0000000058008fff (prio 0, i/o): tz-ppc-port[1]
        0000000058009000-0000000058009fff (prio 0, i/o): tz-ppc-port[2]
        0000000080000000-0000000080ffffff (prio 0, ram): mps.ram

So as a quality of life feature lets expose the name of the underlying
region so we get something more useful:

    0000000000000000-ffffffffffffffff (prio -2, i/o): system
      0000000000000000-00000000003fffff (prio 0, i/o): tz-mpc-upstream
      0000000000400000-00000000007fffff (prio 0, i/o): alias ssram-0-alias @tz-mpc-upstream 0000000000000000-00000000003fffff
      0000000028000000-00000000281fffff (prio 0, i/o): tz-mpc-upstream
      0000000028200000-00000000283fffff (prio 0, i/o): tz-mpc-upstream
      0000000040080000-0000000040080fff (prio 0, i/o): iotkit-secctl-ns-regs
      0000000040100000-0000000040100fff (prio 0, i/o): tz-ppc-port[gpio0]
      0000000040101000-0000000040101fff (prio 0, i/o): tz-ppc-port[gpio1]
      0000000040102000-0000000040102fff (prio 0, i/o): tz-ppc-port[gpio2]
      0000000040103000-0000000040103fff (prio 0, i/o): tz-ppc-port[gpio3]
      0000000040110000-0000000040110fff (prio 0, i/o): tz-ppc-port[pl080]
      0000000040111000-0000000040111fff (prio 0, i/o): tz-ppc-port[pl080]
      0000000040112000-0000000040112fff (prio 0, i/o): tz-ppc-port[pl080]
      0000000040113000-0000000040113fff (prio 0, i/o): tz-ppc-port[pl080]
      0000000040200000-0000000040200fff (prio 0, i/o): tz-ppc-port[uart]
      0000000040201000-0000000040201fff (prio 0, i/o): tz-ppc-port[uart]
      0000000040202000-0000000040202fff (prio 0, i/o): tz-ppc-port[uart]
      0000000040203000-0000000040203fff (prio 0, i/o): tz-ppc-port[uart]
      0000000040204000-0000000040204fff (prio 0, i/o): tz-ppc-port[uart]
      0000000040205000-0000000040205fff (prio 0, i/o): tz-ppc-port[pl022]
      0000000040206000-0000000040206fff (prio 0, i/o): tz-ppc-port[pl022]
      0000000040207000-0000000040207fff (prio 0, i/o): tz-ppc-port[arm_sbcon_i2c]
      0000000040208000-0000000040208fff (prio 0, i/o): tz-ppc-port[arm_sbcon_i2c]
      0000000040209000-0000000040209fff (prio 0, i/o): tz-ppc-port[pl022]
      000000004020a000-000000004020afff (prio 0, i/o): tz-ppc-port[pl022]
      000000004020b000-000000004020bfff (prio 0, i/o): tz-ppc-port[pl022]
      000000004020c000-000000004020cfff (prio 0, i/o): tz-ppc-port[arm_sbcon_i2c]
      000000004020d000-000000004020dfff (prio 0, i/o): tz-ppc-port[arm_sbcon_i2c]
      0000000040300000-0000000040300fff (prio 0, i/o): tz-ppc-port[mps2-scc]
      0000000040301000-0000000040301fff (prio 0, i/o): tz-ppc-port[i2s-audio]
      0000000040302000-0000000040302fff (prio 0, i/o): tz-ppc-port[mps2-fpgaio]
      0000000041000000-000000004113ffff (prio 0, i/o): tz-ppc-port[gfx]
      0000000042000000-00000000420000ff (prio 0, i/o): tz-ppc-port[lan9118-mmio]
      0000000048007000-0000000048007fff (prio -1000, i/o): FPGA NS PC
      0000000050080000-0000000050080fff (prio 0, i/o): iotkit-secctl-s-regs
      0000000058007000-0000000058007fff (prio 0, i/o): tz-ppc-port[tz-mpc-regs]
      0000000058008000-0000000058008fff (prio 0, i/o): tz-ppc-port[tz-mpc-regs]
      0000000058009000-0000000058009fff (prio 0, i/o): tz-ppc-port[tz-mpc-regs]
      0000000080000000-0000000080ffffff (prio 0, ram): mps.ram

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Cc: Jim MacArthur <jim.macarthur@linaro.org>
---
 hw/misc/tz-ppc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hw/misc/tz-ppc.c b/hw/misc/tz-ppc.c
index e4235a846d4..fd305f9f62f 100644
--- a/hw/misc/tz-ppc.c
+++ b/hw/misc/tz-ppc.c
@@ -273,7 +273,7 @@ static void tz_ppc_realize(DeviceState *dev, Error **errp)
             continue;
         }
 
-        name = g_strdup_printf("tz-ppc-port[%d]", i);
+        name = g_strdup_printf("tz-ppc-port[%s]", memory_region_name(port->downstream));
 
         port->ppc = s;
         address_space_init(&port->downstream_as, port->downstream, name);
-- 
2.47.3


Re: [RFC PATCH] hw/misc: make the tz-ppc-port names more useful
Posted by Peter Maydell 4 weeks ago
On Mon, 15 Dec 2025 at 17:05, Alex Bennée <alex.bennee@linaro.org> wrote:
>
> The TrustZone peripheral protection controller (tz-ppc) sits between
> peripherals and the main system. However this results in "info mtree"
> looking at bit confusing, especially as the sequence numbers can
> overlap and miss steps:
>
>       0000000000000000-ffffffffffffffff (prio -2, i/o): system
>         0000000000000000-00000000003fffff (prio 0, i/o): tz-mpc-upstream
>         0000000000400000-00000000007fffff (prio 0, i/o): alias ssram-0-alias @tz-mpc-upstream 0000000000000000-00000000003fffff
>         0000000028000000-00000000281fffff (prio 0, i/o): tz-mpc-upstream
>         0000000028200000-00000000283fffff (prio 0, i/o): tz-mpc-upstream
>         0000000040080000-0000000040080fff (prio 0, i/o): iotkit-secctl-ns-regs
>         0000000040100000-0000000040100fff (prio 0, i/o): tz-ppc-port[1]
>         0000000040101000-0000000040101fff (prio 0, i/o): tz-ppc-port[2]
>         0000000040102000-0000000040102fff (prio 0, i/o): tz-ppc-port[3]
>         0000000040103000-0000000040103fff (prio 0, i/o): tz-ppc-port[4]
>         0000000040110000-0000000040110fff (prio 0, i/o): tz-ppc-port[0]
>         0000000040111000-0000000040111fff (prio 0, i/o): tz-ppc-port[1]

> So as a quality of life feature lets expose the name of the underlying
> region so we get something more useful:
>
>     0000000000000000-ffffffffffffffff (prio -2, i/o): system
>       0000000000000000-00000000003fffff (prio 0, i/o): tz-mpc-upstream
>       0000000000400000-00000000007fffff (prio 0, i/o): alias ssram-0-alias @tz-mpc-upstream 0000000000000000-00000000003fffff
>       0000000028000000-00000000281fffff (prio 0, i/o): tz-mpc-upstream
>       0000000028200000-00000000283fffff (prio 0, i/o): tz-mpc-upstream
>       0000000040080000-0000000040080fff (prio 0, i/o): iotkit-secctl-ns-regs
>       0000000040100000-0000000040100fff (prio 0, i/o): tz-ppc-port[gpio0]
>       0000000040101000-0000000040101fff (prio 0, i/o): tz-ppc-port[gpio1]
>       0000000040102000-0000000040102fff (prio 0, i/o): tz-ppc-port[gpio2]
>       0000000040103000-0000000040103fff (prio 0, i/o): tz-ppc-port[gpio3]

Maybe we should print both the port number and the downstream device,
so eg tz-ppc-port[1:gpio0], etc ? Especially for the uart ports
this would disambiguate:

>       0000000040200000-0000000040200fff (prio 0, i/o): tz-ppc-port[uart]
>       0000000040201000-0000000040201fff (prio 0, i/o): tz-ppc-port[uart]
>       0000000040202000-0000000040202fff (prio 0, i/o): tz-ppc-port[uart]
>       0000000040203000-0000000040203fff (prio 0, i/o): tz-ppc-port[uart]
>       0000000040204000-0000000040204fff (prio 0, i/o): tz-ppc-port[uart]

(and if you are actually programming the thing then knowing which port is
which might be helpful).

The other thing that is confusing in this output is that there are
multiple TYPE_TZ_PPC devices in this system, but we don't have
any indication of that in the output. (This is why the port numbers
repeat: port 1 on one TZ_PPC is different from port 1 on a different
TZ_PPC.) I was going to suggest that we could make "info mtree"
print the owner of the MR, but it looks like we already have
that, we just don't document it: there's an "owner=' suboption
that can be set to true...

thanks
-- PMM
Re: [RFC PATCH] hw/misc: make the tz-ppc-port names more useful
Posted by Philippe Mathieu-Daudé 1 month, 3 weeks ago
On 15/12/25 18:05, Alex Bennée wrote:
> The TrustZone peripheral protection controller (tz-ppc) sits between
> peripherals and the main system. However this results in "info mtree"
> looking at bit confusing, especially as the sequence numbers can
> overlap and miss steps:
> 
>        0000000000000000-ffffffffffffffff (prio -2, i/o): system
>          0000000000000000-00000000003fffff (prio 0, i/o): tz-mpc-upstream
>          0000000000400000-00000000007fffff (prio 0, i/o): alias ssram-0-alias @tz-mpc-upstream 0000000000000000-00000000003fffff
>          0000000028000000-00000000281fffff (prio 0, i/o): tz-mpc-upstream
>          0000000028200000-00000000283fffff (prio 0, i/o): tz-mpc-upstream
>          0000000040080000-0000000040080fff (prio 0, i/o): iotkit-secctl-ns-regs
>          0000000040100000-0000000040100fff (prio 0, i/o): tz-ppc-port[1]
>          0000000040101000-0000000040101fff (prio 0, i/o): tz-ppc-port[2]
>          0000000040102000-0000000040102fff (prio 0, i/o): tz-ppc-port[3]
>          0000000040103000-0000000040103fff (prio 0, i/o): tz-ppc-port[4]
>          0000000040110000-0000000040110fff (prio 0, i/o): tz-ppc-port[0]
>          0000000040111000-0000000040111fff (prio 0, i/o): tz-ppc-port[1]
>          0000000040112000-0000000040112fff (prio 0, i/o): tz-ppc-port[2]
>          0000000040113000-0000000040113fff (prio 0, i/o): tz-ppc-port[3]
>          0000000040200000-0000000040200fff (prio 0, i/o): tz-ppc-port[5]
>          0000000040201000-0000000040201fff (prio 0, i/o): tz-ppc-port[6]
>          0000000040202000-0000000040202fff (prio 0, i/o): tz-ppc-port[7]
>          0000000040203000-0000000040203fff (prio 0, i/o): tz-ppc-port[8]
>          0000000040204000-0000000040204fff (prio 0, i/o): tz-ppc-port[9]
>          0000000040205000-0000000040205fff (prio 0, i/o): tz-ppc-port[0]
>          0000000040206000-0000000040206fff (prio 0, i/o): tz-ppc-port[1]
>          0000000040207000-0000000040207fff (prio 0, i/o): tz-ppc-port[10]
>          0000000040208000-0000000040208fff (prio 0, i/o): tz-ppc-port[11]
>          0000000040209000-0000000040209fff (prio 0, i/o): tz-ppc-port[2]
>          000000004020a000-000000004020afff (prio 0, i/o): tz-ppc-port[3]
>          000000004020b000-000000004020bfff (prio 0, i/o): tz-ppc-port[4]
>          000000004020c000-000000004020cfff (prio 0, i/o): tz-ppc-port[12]
>          000000004020d000-000000004020dfff (prio 0, i/o): tz-ppc-port[13]
>          0000000040300000-0000000040300fff (prio 0, i/o): tz-ppc-port[0]
>          0000000040301000-0000000040301fff (prio 0, i/o): tz-ppc-port[1]
>          0000000040302000-0000000040302fff (prio 0, i/o): tz-ppc-port[2]
>          0000000041000000-000000004113ffff (prio 0, i/o): tz-ppc-port[0]
>          0000000042000000-00000000420000ff (prio 0, i/o): tz-ppc-port[5]
>          0000000048007000-0000000048007fff (prio -1000, i/o): FPGA NS PC
>          0000000050080000-0000000050080fff (prio 0, i/o): iotkit-secctl-s-regs
>          0000000058007000-0000000058007fff (prio 0, i/o): tz-ppc-port[0]
>          0000000058008000-0000000058008fff (prio 0, i/o): tz-ppc-port[1]
>          0000000058009000-0000000058009fff (prio 0, i/o): tz-ppc-port[2]
>          0000000080000000-0000000080ffffff (prio 0, ram): mps.ram
> 
> So as a quality of life feature lets expose the name of the underlying
> region so we get something more useful:
> 
>      0000000000000000-ffffffffffffffff (prio -2, i/o): system
>        0000000000000000-00000000003fffff (prio 0, i/o): tz-mpc-upstream
>        0000000000400000-00000000007fffff (prio 0, i/o): alias ssram-0-alias @tz-mpc-upstream 0000000000000000-00000000003fffff
>        0000000028000000-00000000281fffff (prio 0, i/o): tz-mpc-upstream
>        0000000028200000-00000000283fffff (prio 0, i/o): tz-mpc-upstream
>        0000000040080000-0000000040080fff (prio 0, i/o): iotkit-secctl-ns-regs
>        0000000040100000-0000000040100fff (prio 0, i/o): tz-ppc-port[gpio0]
>        0000000040101000-0000000040101fff (prio 0, i/o): tz-ppc-port[gpio1]
>        0000000040102000-0000000040102fff (prio 0, i/o): tz-ppc-port[gpio2]
>        0000000040103000-0000000040103fff (prio 0, i/o): tz-ppc-port[gpio3]
>        0000000040110000-0000000040110fff (prio 0, i/o): tz-ppc-port[pl080]
>        0000000040111000-0000000040111fff (prio 0, i/o): tz-ppc-port[pl080]
>        0000000040112000-0000000040112fff (prio 0, i/o): tz-ppc-port[pl080]
>        0000000040113000-0000000040113fff (prio 0, i/o): tz-ppc-port[pl080]
>        0000000040200000-0000000040200fff (prio 0, i/o): tz-ppc-port[uart]
>        0000000040201000-0000000040201fff (prio 0, i/o): tz-ppc-port[uart]
>        0000000040202000-0000000040202fff (prio 0, i/o): tz-ppc-port[uart]
>        0000000040203000-0000000040203fff (prio 0, i/o): tz-ppc-port[uart]
>        0000000040204000-0000000040204fff (prio 0, i/o): tz-ppc-port[uart]
>        0000000040205000-0000000040205fff (prio 0, i/o): tz-ppc-port[pl022]
>        0000000040206000-0000000040206fff (prio 0, i/o): tz-ppc-port[pl022]
>        0000000040207000-0000000040207fff (prio 0, i/o): tz-ppc-port[arm_sbcon_i2c]
>        0000000040208000-0000000040208fff (prio 0, i/o): tz-ppc-port[arm_sbcon_i2c]
>        0000000040209000-0000000040209fff (prio 0, i/o): tz-ppc-port[pl022]
>        000000004020a000-000000004020afff (prio 0, i/o): tz-ppc-port[pl022]
>        000000004020b000-000000004020bfff (prio 0, i/o): tz-ppc-port[pl022]
>        000000004020c000-000000004020cfff (prio 0, i/o): tz-ppc-port[arm_sbcon_i2c]
>        000000004020d000-000000004020dfff (prio 0, i/o): tz-ppc-port[arm_sbcon_i2c]
>        0000000040300000-0000000040300fff (prio 0, i/o): tz-ppc-port[mps2-scc]
>        0000000040301000-0000000040301fff (prio 0, i/o): tz-ppc-port[i2s-audio]
>        0000000040302000-0000000040302fff (prio 0, i/o): tz-ppc-port[mps2-fpgaio]
>        0000000041000000-000000004113ffff (prio 0, i/o): tz-ppc-port[gfx]
>        0000000042000000-00000000420000ff (prio 0, i/o): tz-ppc-port[lan9118-mmio]
>        0000000048007000-0000000048007fff (prio -1000, i/o): FPGA NS PC
>        0000000050080000-0000000050080fff (prio 0, i/o): iotkit-secctl-s-regs
>        0000000058007000-0000000058007fff (prio 0, i/o): tz-ppc-port[tz-mpc-regs]
>        0000000058008000-0000000058008fff (prio 0, i/o): tz-ppc-port[tz-mpc-regs]
>        0000000058009000-0000000058009fff (prio 0, i/o): tz-ppc-port[tz-mpc-regs]
>        0000000080000000-0000000080ffffff (prio 0, ram): mps.ram
> 
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> Cc: Jim MacArthur <jim.macarthur@linaro.org>
> ---
>   hw/misc/tz-ppc.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>