On Thu, 6 Mar 2025, Jason Andryuk wrote: > Add domain capabilities to creating disaggregated systems. > > Signed-off-by: Jason Andryuk <jason.andr...@amd.com>
Reviewed-by: Stefano Stabellini <sstabell...@kernel.org> > --- > README.md | 16 ++++++++++++++ > scripts/uboot-script-gen | 47 ++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 63 insertions(+) > > diff --git a/README.md b/README.md > index ae2fdfd..25c9b6e 100644 > --- a/README.md > +++ b/README.md > @@ -250,6 +250,22 @@ Where: > Set driver_domain in xl config file. This option is only available for > the disk_image script. > > +- DOMU_CAPS[number] = "string" or "hex" (optional) > + A "|"-concatentated string of capabilities: > + - control > + - hardware > + - xenstore > + - dom0 (All of the above) > + - none > + > + e.g. "control|hardware" > + > + Or a numeric bitwise flags to specify domain capabilities: > + 0: None > + 1: Control > + 2: Hardware > + 4: Xenstore > + > - LINUX is optional but specifies the Linux kernel for when Xen is NOT > used. To enable this set any LINUX\_\* variables and do NOT set the > XEN variable. > diff --git a/scripts/uboot-script-gen b/scripts/uboot-script-gen > index db2c011..397d73b 100755 > --- a/scripts/uboot-script-gen > +++ b/scripts/uboot-script-gen > @@ -309,6 +309,43 @@ function add_device_tree_cpupools() > done > } > > +function parse_domain_caps() > +{ > + local caps_str="$1" > + local caps=0 > + > + for x in $( echo $caps_str | sed 's/|/ /g' | tr '[:upper:]' '[:lower:]' ) > + do > + case "$x" in > + none) > + caps=$(( caps | 0 )) > + ;; > + control) > + caps=$(( caps | 0x1 )) > + ;; > + hardware) > + caps=$(( caps | 0x2 )) > + ;; > + xenstore) > + caps=$(( caps | 0x4 )) > + ;; > + dom0|domain0) > + caps=$(( caps | 0x7 )) > + ;; > + [0-9]*|0x[0-9a-fA-f]*) > + caps=$(( caps | $x )) > + ;; > + *) > + return 1 > + ;; > + esac > + done > + > + echo "$caps" > + > + return 0 > +} > + > function xen_device_tree_editing() > { > dt_set "/chosen" "#address-cells" "hex" "0x2" > @@ -386,6 +423,16 @@ function xen_device_tree_editing() > then > dt_set "/chosen/domU$i" "max_maptrack_frames" "int" > "${DOMU_MAPTRACK_FRAMES[i]}" > fi > + if test -n "${DOMU_CAPS[i]}" > + then > + local caps > + > + if ! caps=$( parse_domain_caps ${DOMU_CAPS[i]} ) ; then > + echo "Invalid DOMU_CAPS[$i] \"${DOMU_CAPS[i]}\"" > + cleanup_and_return_err > + fi > + dt_set "/chosen/domU$i" "capabilities" "int" "$caps" > + fi > > if test -n "${DOMU_SHARED_MEM[i]}" > then > -- > 2.48.1 >