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
> 

Reply via email to