|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [ImageBuilder 2/2] Add support for lopper to generate partial dts
Hi Ayan,
On 12/09/2022 18:41, Ayan Kumar Halder wrote:
> Hi Michal,
>
> On 12/09/2022 12:59, 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,
>> 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>
>> ---
>> README.md | 22 ++++++++++++--
>> scripts/common | 64 ++++++++++++++++++++++++++++++----------
>> scripts/uboot-script-gen | 17 +++++++++--
>> 3 files changed, 83 insertions(+), 20 deletions(-)
>>
>> diff --git a/README.md b/README.md
>> index da9ba788a3bf..aaee0939b589 100644
>> --- a/README.md
>> +++ b/README.md
>> @@ -128,6 +128,19 @@ 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. This is optional.
>> + However, if this is specified, then DOMU_PASSTHROUGH_PATHS[number] need
>> + to be specified. uboot-script-gen will invoke lopper to generate the
>> partial
>> + device trees which have been specified 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.
>
> You are using some more arguments (besides -x and -i) :-
>
> --permissive -f
> -- extract -t
> -- extract-xen -t $node -o
These ones are fixed and do not differ depending on the type of device or board.
That is why LOPPER_CMD is used only to allow users to specify what can be
required
to support a new device (usually not necessary) or a new board.
>
> It will be good to have some explaination for these. See my comments below.
>
We don't seem to do it in general (see all the commands used by disk_image) so
I think
we should only describe what is available to the user. Otherwise we would need
to be
consistent and apply this rule to all the other places.
>> +
>> - NUM_DOMUS specifies how many Dom0-less DomUs to load
>>
>> - DOMU_KERNEL[number] specifies the DomU kernel to use.
>> @@ -140,7 +153,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 +162,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..680c5090cd07 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,25 @@ 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
>> +
>> + $LOPPER_PATH --permissive -f $DEVICE_TREE \
>> + -- extract -t $devpath $LOPPER_CMD \
>> + -- extract-xen -t $node -o $file
> See below comment. Applies here as well.
>> +
>> + 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
>> diff --git a/scripts/uboot-script-gen b/scripts/uboot-script-gen
>> index 1f8ab5ffd193..84a68d6bd0b0 100755
>> --- a/scripts/uboot-script-gen
>> +++ b/scripts/uboot-script-gen
>> @@ -1138,10 +1138,23 @@ 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
>> + LOPPER_CMD="-i zynqmp-firmware -x interrupt-controller -x
>> pinctrl -x power-domains -x resets -x current-speed"
>
> It will be very useful, if you could provide the link to Lopper's README
> which explains the arguments used here, as a comment.
>
This lopper feature is still in an early state, hence there is no such
information
in the README. I described everything a user can change (like -i and -x option)
using the information
from the extract's help.
> Even better if you can provide some explaination (as a comment) to what
> the command intends to do here
>
> - Ayan
>
>> + 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
~Michal
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |