Hello Troy,

+
+    memory_region_init_io(&s->iomem, OBJECT(s), &aspeed_i3c_ops, s,
+            TYPE_ASPEED_I3C, ASPEED_I3C_NR_REGS << 2);
+
+    sysbus_init_mmio(sbd, &s->iomem);

I would add a container region containing all the regions :


      memory_region_init(&s->iomem_container, OBJECT(s),
                         TYPE_ASPEED_I3C ".container", 0x8000);

      sysbus_init_mmio(sbd, &s->iomem_container);

      memory_region_init_io(&s->iomem, OBJECT(s), &aspeed_i3c_ops, s,
              TYPE_ASPEED_I3C ".regs", 0x70);

      memory_region_add_subregion(&s->iomem_container, 0x0, &s->iomem);



The goal is to have a stricter layout so that you can catch errors :

      000000001e7a0000-000000001e7a7fff (prio 0, i/o): aspeed.i3c.container
        000000001e7a0000-000000001e7a006f (prio 0, i/o): aspeed.i3c.regs
        000000001e7a2000-000000001e7a22ff (prio 0, i/o): aspeed.i3c.device.0
        000000001e7a3000-000000001e7a32ff (prio 0, i/o): aspeed.i3c.device.1
        000000001e7a4000-000000001e7a42ff (prio 0, i/o): aspeed.i3c.device.2
        000000001e7a5000-000000001e7a52ff (prio 0, i/o): aspeed.i3c.device.3
        000000001e7a6000-000000001e7a62ff (prio 0, i/o): aspeed.i3c.device.4
        000000001e7a7000-000000001e7a72ff (prio 0, i/o): aspeed.i3c.device.5

and if under U-Boot, you peek into unimplemented regs, you get a warning :

      ast# md 1e7a0000
      1e7a0000: 00000000 00000000 00000000 00000000    ................
      1e7a0010: 00000000 00000000 00000000 00000000    ................
      1e7a0020: 00000000 00000000 00000000 00000000    ................
      1e7a0030: 00000000 00000000 00000000 00000000    ................
      1e7a0040: 00000000 00000000 00000000 00000000    ................
      1e7a0050: 00000000 00000000 00000000 00000000    ................
      1e7a0060: 00000000 00000000 00000000 00000000    ................
      1e7a0070:aspeed_soc.io: unimplemented device read  (size 4, offset 
0x1a0070)
       00000000aspeed_soc.io: unimplemented device read  (size 4, offset 
0x1a0074)

Thanks for the code snippet, learnt and applied.
Yes, it would be easier to catch driver problems.

That said, not all Aspeed models follow this pattern. We learned along
the way and we could improve some older implementations.

btw, I tried your series with ast2600-default-obmc.tar.gz. It boots fine.

Thanks,

C.

Reply via email to