|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [ImageBuilder v2 2/2] Add support for lopper to generate partial dts
On Tue, 13 Sep 2022, Michal Orzel wrote:
> Currently ImageBuilder can compile and merge partial dts obtained from
> a repository specified using PASSTHROUGH_DTS_REPO. With the recent
> changes done in the lopper, we can use it to generate partial dts
> automatically (to some extent as this is still an early support).
>
> Introduce LOPPER_PATH option to specify a path to a lopper.py script,
> the main script in the Lopper repository, that if set, will invoke lopper
> to generate partial dts for the passthrough devices specified in
> DOMU_PASSTHROUGH_PATHS.
>
> Introduce LOPPER_CMD option to specify custom command line arguments
> (if needed) for lopper's extract assist.
>
> Example usage:
> LOPPER_PATH="/home/user/lopper/lopper.py"
> DOMU_PASSTHROUGH_PATHS[0]="/axi/spi@ff0f0000 /axi/serial@ff010000"
>
> Signed-off-by: Michal Orzel <michal.orzel@xxxxxxx>
Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
Given the state of the release I would commit these two patches to a
"master-next" branch to be merged into "master" later.
But I'll wait before committing to hear your thoughrs on the SRC_URI
suggestion in the other email.
> ---
> Changes in v2:
> - improve documentation
> - update commit msg
> - use node=${devpath##*/} instead of file=${devpath##*/}
> ---
> README.md | 23 ++++++++++--
> scripts/common | 77 ++++++++++++++++++++++++++++++----------
> scripts/uboot-script-gen | 22 ++++++++++--
> 3 files changed, 100 insertions(+), 22 deletions(-)
>
> diff --git a/README.md b/README.md
> index da9ba788a3bf..f4213d570033 100644
> --- a/README.md
> +++ b/README.md
> @@ -128,6 +128,20 @@ Where:
> - DT_OVERLAY[number] specifies the path to the hosts device tree overlays
> to be added at boot time in u-boot
>
> +- LOPPER_PATH specifies the path to lopper.py script, the main script in the
> + Lopper repository (https://github.com/devicetree-org/lopper). This is
> + optional. However, if this is specified, then
> DOMU_PASSTHROUGH_PATHS[number]
> + needs to be specified. uboot-script-gen will invoke lopper to generate the
> + partial device trees for devices which have been listed in
> + DOMU_PASSTHROUGH_PATHS[number]. This option is currently in experimental
> state
> + as the corresponding lopper changes are still in an early support state.
> +
> +- LOPPER_CMD specifies the command line arguments for lopper's extract
> assist.
> + This is optional and only applicable when LOPPER_PATH is specified. Only
> to be
> + used to specify which nodes to include (using -i <node_name>) and which
> + nodes/properties to exclude (using -x <regex>). If not set at all, the
> default
> + one is used applicable for ZynqMP MPSoC boards.
> +
> - NUM_DOMUS specifies how many Dom0-less DomUs to load
>
> - DOMU_KERNEL[number] specifies the DomU kernel to use.
> @@ -140,7 +154,7 @@ Where:
> - DOMU_PASSTHROUGH_PATHS[number] specifies the passthrough devices (
> separated by spaces). It adds "xen,passthrough" to the corresponding
> dtb nodes in xen device tree blob.
> - This option is valid in the following two cases:
> + This option is valid in the following cases:
>
> 1. When PASSTHROUGH_DTS_REPO is provided.
> With this option, the partial device trees (corresponding to the
> @@ -149,7 +163,12 @@ Where:
> Note it assumes that the names of the partial device trees will match
> to the names of the devices specified here.
>
> - 2. When DOMU_NOBOOT[number] is provided. In this case, it will only
> + 2. When LOPPER_PATH is provided.
> + With this option, the partial device trees (corresponding to the
> + passthrough devices) are generated by the lopper and then compiled and
> merged
> + by ImageBuilder to be used as DOMU[number] device tree blob.
> +
> + 3. When DOMU_NOBOOT[number] is provided. In this case, it will only
> add "xen,passthrough" as mentioned before.
>
> - DOMU_PASSTHROUGH_DTB[number] specifies the passthrough device trees
> diff --git a/scripts/common b/scripts/common
> index ccad03d82b30..2dd98fb94d3e 100644
> --- a/scripts/common
> +++ b/scripts/common
> @@ -9,6 +9,9 @@
> # - NUM_DOMUS
> # - DOMU_PASSTHROUGH_PATHS
> # - DOMU_PASSTHROUGH_DTB
> +# - LOPPER_PATH
> +# - LOPPER_CMD
> +# - DEVICE_TREE
>
> tmp_files=()
> tmp_dirs=()
> @@ -99,31 +102,41 @@ function compile_merge_partial_dts()
> local tmp
> local tmpdts
> local file
> + local node
> local i
> local j
>
> - if [[ "$repo" =~ .*@.*:.* ]]
> + if test "$repo"
> then
> - tmp=`mktemp -d`
> - tmp_dirs+=($tmp)
> -
> - echo "Cloning git repo \"$git_repo\""
> - git clone "$repo" $tmp
> - if test $? -ne 0
> + # Partial dts will be obtained from PASSTHROUGH_DTS_REPO
> + if [[ "$repo" =~ .*@.*:.* ]]
> then
> - echo "Error occurred while cloning \"$git_repo\""
> - return 1
> - fi
> + tmp=`mktemp -d`
> + tmp_dirs+=($tmp)
>
> - repo=$tmp
> - fi
> + echo "Cloning git repo \"$git_repo\""
> + git clone "$repo" $tmp
> + if test $? -ne 0
> + then
> + echo "Error occurred while cloning \"$git_repo\""
> + return 1
> + fi
>
> - if test -z "$dir"
> - then
> - dir="."
> + repo=$tmp
> + fi
> +
> + if test -z "$dir"
> + then
> + dir="."
> + fi
> + partial_dts_dir="$repo"/"$dir"
> + else
> + # Partial dts will be generated by the lopper
> + tmp=`mktemp -d`
> + tmp_dirs+=($tmp)
> + partial_dts_dir="$tmp"
> fi
>
> - partial_dts_dir="$repo"/"$dir"
> i=0
> while test $i -lt $NUM_DOMUS
> do
> @@ -133,6 +146,34 @@ function compile_merge_partial_dts()
> return 1
> fi
>
> + if test -z "$repo"
> + then
> + # Generate partial dts using lopper
> + for devpath in ${DOMU_PASSTHROUGH_PATHS[$i]}
> + do
> + node=${devpath##*/}
> + file="$partial_dts_dir"/"$node".dts
> +
> + # Execute lopper with the following assists:
> + # - extract: used to take the target node, extract it from
> the
> + # system device tree, chase the phandle references and
> place
> + # it in a new extracted tree structure,
> + # - extract-xen: used to perform Xen specific modifications
> + # on the extracted tree structure e.g. adding "xen,path",
> + # "xen,reg", interrupt-parent properties.
> + # For additional information, please see the lopper's README
> + # file as well as usage of the mentioned assists.
> + $LOPPER_PATH --permissive -f $DEVICE_TREE \
> + -- extract -t $devpath $LOPPER_CMD \
> + -- extract-xen -t $node -o $file
> +
> + if test $? -ne 0
> + then
> + return 1
> + fi
> + done
> + fi
> +
> sanity_check_partial_dts "${DOMU_PASSTHROUGH_PATHS[$i]}"
> "$partial_dts_dir"
> if test $? -ne 0
> then
> @@ -146,8 +187,8 @@ function compile_merge_partial_dts()
>
> for devpath in ${DOMU_PASSTHROUGH_PATHS[$i]}
> do
> - file=${devpath##*/}
> - file="$partial_dts_dir"/"$file".dts
> + node=${devpath##*/}
> + file="$partial_dts_dir"/"$node".dts
>
> # All the subsequent dts files should not have dts version
> mentioned
> if test $j -gt 1
> diff --git a/scripts/uboot-script-gen b/scripts/uboot-script-gen
> index 1f8ab5ffd193..b24dca2b7f7e 100755
> --- a/scripts/uboot-script-gen
> +++ b/scripts/uboot-script-gen
> @@ -1138,10 +1138,28 @@ fi
> # tftp or move the files to a partition
> cd "$uboot_dir"
>
> -if test "$PASSTHROUGH_DTS_REPO"
> +# If both PASSTHROUGH_DTS_REPO and LOPPER_PATH options are specified,
> +# the former takes precedence because the partial device trees are already
> +# created (probably tested), hence the reliability is higher than using
> lopper.
> +if test "$PASSTHROUGH_DTS_REPO" || test "$LOPPER_PATH"
> then
> output_dir=`mktemp -d "partial-dtbs-XXX"`
> - compile_merge_partial_dts $output_dir "$PASSTHROUGH_DTS_REPO"
> + if test "$PASSTHROUGH_DTS_REPO"
> + then
> + compile_merge_partial_dts $output_dir "$PASSTHROUGH_DTS_REPO"
> + else
> + if test -z "$LOPPER_CMD"
> + then
> + # Default for ZynqMP MPSoC.
> + # The following command instructs lopper's extract assist to
> always
> + # include zynqmp-firmware node (as it contains e.g.
> clock-controller
> + # required by most of the devices) in the extracted tree
> structure
> + # and to drop nodes/properties during the extraction process that
> + # are not needed.
> + LOPPER_CMD="-i zynqmp-firmware -x interrupt-controller -x
> pinctrl -x power-domains -x resets -x current-speed"
> + fi
> + compile_merge_partial_dts $output_dir
> + fi
> if test $? -ne 0
> then
> # Remove the output dir holding the partial dtbs in case of any error
> --
> 2.25.1
>
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |