Hi Daniel, That's correct -- I believe this [1] patch on the OpenSBI mailing list addresses this issue. I am currently waiting for it to be reviewed.
Thanks, Gregor [1] http://lists.infradead.org/pipermail/opensbi/2024-August/007240.html On Thu, Aug 22, 2024 at 2:49 PM Daniel Henrique Barboza < dbarb...@ventanamicro.com> wrote: > > > On 8/5/24 6:04 PM, Gregor Haas wrote: > > This patch series adds support for specifying OpenSBI domains on the QEMU > > command line. A simple example of what this looks like is below, > including > > mapping the board's UART into the secondary domain: > > > > qemu-system-riscv64 -machine virt -bios fw_jump.bin -cpu max -smp 2 -m > 4G -nographic \ > > -device > opensbi-memregion,id=mem,base=0xBC000000,order=26,mmio=false \ > > -device > opensbi-memregion,id=uart,base=0x10000000,order=12,mmio=true,device0="/soc/serial@10000000" > \ > > -device > opensbi-domain,id=domain,possible-harts=0-1,boot-hart=0x0,next-addr=0xBC000000,next-mode=1,region0=mem,perms0=0x3f,region1=uart,perms1=0x3f > > > > As a result of the above configuration, QEMU will add the following > subnodes to > > the device tree: > > > > chosen { > > opensbi-domains { > > compatible = "opensbi,domain,config"; > > > > domain { > > next-mode = <0x01>; > > next-addr = <0x00 0xbc000000>; > > boot-hart = <0x03>; > > regions = <0x8000 0x3f 0x8002 0x3f>; > > possible-harts = <0x03 0x01>; > > phandle = <0x8003>; > > compatible = "opensbi,domain,instance"; > > }; > > > > uart { > > phandle = <0x8002>; > > devices = <0x1800000>; > > mmio; > > order = <0x0c>; > > base = <0x00 0x10000000>; > > compatible = "opensbi,domain,memregion"; > > }; > > > > mem { > > phandle = <0x8000>; > > order = <0x1a>; > > base = <0x00 0xbc000000>; > > compatible = "opensbi,domain,memregion"; > > }; > > }; > > }; > > > > This results in OpenSBI output as below, where regions 01-03 are > inherited from > > the root domain and regions 00 and 04 correspond to the user specified > ones: > > > > Domain1 Name : domain > > Domain1 Boot HART : 0 > > Domain1 HARTs : 0,1 > > Domain1 Region00 : 0x0000000010000000-0x0000000010000fff M: > (I,R,W,X) S/U: (R,W,X) > > Domain1 Region01 : 0x0000000002000000-0x000000000200ffff M: > (I,R,W) S/U: () > > Domain1 Region02 : 0x0000000080080000-0x000000008009ffff M: > (R,W) S/U: () > > Domain1 Region03 : 0x0000000080000000-0x000000008007ffff M: > (R,X) S/U: () > > Domain1 Region04 : 0x00000000bc000000-0x00000000bfffffff M: > (R,W,X) S/U: (R,W,X) > > Domain1 Next Address : 0x00000000bc000000 > > Domain1 Next Arg1 : 0x0000000000000000 > > Domain1 Next Mode : S-mode > > Domain1 SysReset : no > > Domain1 SysSuspend : no > > I believe we need OpenSBI patches for this output, don't we? If I try this > example using stock > OpenSBI 1.5.1 from QEMU this happens: > > > OpenSBI v1.5.1 > ____ _____ ____ _____ > / __ \ / ____| _ \_ _| > | | | |_ __ ___ _ __ | (___ | |_) || | > | | | | '_ \ / _ \ '_ \ \___ \| _ < | | > | |__| | |_) | __/ | | |____) | |_) || |_ > \____/| .__/ \___|_| |_|_____/|____/_____| > | | > |_| > > sbi_domain_finalize: platform domains_init() failed (error -3) > init_coldboot: domain finalize failed (error -3) > (--- hangs ---) > > It's not a big deal or a blocker to have this merged in QEMU regardless, > but it would be nice > to have this documented somewhere (perhaps a new doc file). This would > prevent users from trying > to use the device without the proper support. > > This can be done after this patch is queued though. Thanks, > > > Daniel > > > > > > v3: > > - Addressed review comments from v2 by adding default values to new > properties. > > This results in concrete errors at QEMU configuration time if a > mandatory > > property (as mandated by the OpenSBI spec) is not provided. > > - Changed command line encoding for the possible-harts field from a CPU > bitmask > > (e.g. where bit X is set if CPU X is a possible hart) to a range > format (e.g. > > the possible harts should be CPUs X-Y, where Y >= X). This does > constrain the > > hart assignment to consecutive ranges of harts, but this constraint > is also > > present for other QEMU subsystems (such as NUMA). > > - Added create_fdt_one_device(), which is invoked when scanning the > device tree > > for a memregion's devices. This function allocates a phandle for a > region's > > device if one does not yet exist. > > > > v2: > > - Addressed review comments from v1. Specifically, renamed domain.{c,h} > -> > > opensbi_domain.{c,h} to increase clarity of what these files do. > Also, more > > consistently use g_autofree for dynamically allocated variables > > - Added an "assign" flag to OpenSBIDomainState, which indicates whether > to > > assign the domain's boot hart to it at domain parsing time. > > > > Gregor Haas (1): > > Add support for generating OpenSBI domains in the device tree > > > > MAINTAINERS | 7 + > > hw/riscv/Kconfig | 4 + > > hw/riscv/meson.build | 1 + > > hw/riscv/opensbi_domain.c | 542 ++++++++++++++++++++++++++++++ > > hw/riscv/virt.c | 3 + > > include/hw/riscv/opensbi_domain.h | 50 +++ > > 6 files changed, 607 insertions(+) > > create mode 100644 hw/riscv/opensbi_domain.c > > create mode 100644 include/hw/riscv/opensbi_domain.h > > >