Message ID | 20220506205605.359830-24-nikos.nikoleris@arm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | EFI and ACPI support for arm64 | expand |
On Fri, May 06, 2022 at 09:56:05PM +0100, Nikos Nikoleris wrote: > This change adds a efi/run script inspired by the one in x86. This > script will setup a folder with the test compiled as an EFI app and a > startup.nsh script. The script launches QEMU providing an image with > EDKII and the path to the folder with the test which is executed > automatically. > > For example: > > $> ./arm/efi/run ./arm/selftest.efi setup smp=2 mem=256 > > Signed-off-by: Nikos Nikoleris <nikos.nikoleris@arm.com> > --- > scripts/runtime.bash | 14 +++++----- > arm/efi/run | 61 ++++++++++++++++++++++++++++++++++++++++++++ > arm/run | 8 ++++-- > arm/Makefile.common | 1 + > arm/dummy.c | 4 +++ > 5 files changed, 78 insertions(+), 10 deletions(-) > create mode 100755 arm/efi/run > create mode 100644 arm/dummy.c > > diff --git a/scripts/runtime.bash b/scripts/runtime.bash > index 7d0180b..dc28f24 100644 > --- a/scripts/runtime.bash > +++ b/scripts/runtime.bash > @@ -131,14 +131,12 @@ function run() > fi > > last_line=$(premature_failure > >(tail -1)) && { > - skip=true > - if [ "${CONFIG_EFI}" == "y" ] && [[ "${last_line}" =~ "enabling apic" ]]; then > - skip=false > - fi > - if [ ${skip} == true ]; then > - print_result "SKIP" $testname "" "$last_line" > - return 77 > - fi > + if [ "${CONFIG_EFI}" == "y" ] && [ "${ARCH}" = x86_64 ]; then > + if ! [[ "${last_line}" =~ "enabling apic" ]]; then > + print_result "SKIP" $testname "" "$last_line" > + return 77 > + fi > + fi > } > > cmdline=$(get_cmdline $kernel) > diff --git a/arm/efi/run b/arm/efi/run > new file mode 100755 > index 0000000..dfff717 > --- /dev/null > +++ b/arm/efi/run > @@ -0,0 +1,61 @@ > +#!/bin/bash > + > +set -e > + > +if [ $# -eq 0 ]; then > + echo "Usage $0 TEST_CASE [QEMU_ARGS]" > + exit 2 > +fi > + > +if [ ! -f config.mak ]; then > + echo "run './configure --enable-efi && make' first. See ./configure -h" > + exit 2 > +fi > +source config.mak > +source scripts/arch-run.bash > +source scripts/common.bash > + > +: "${EFI_SRC:=$(realpath "$(dirname "$0")/../")}" > +: "${EFI_UEFI:=/usr/share/qemu-efi-aarch64/QEMU_EFI.fd}" > +: "${EFI_TEST:=efi-tests}" > +: "${EFI_CASE:=$(basename $1 .efi)}" > + > +if [ ! -f "$EFI_UEFI" ]; then > + echo "UEFI firmware not found: $EFI_UEFI" > + echo "Please install the UEFI firmware to this path" > + echo "Or specify the correct path with the env variable EFI_UEFI" > + exit 2 > +fi > + > +# Remove the TEST_CASE from $@ > +shift 1 > + > +# Fish out the arguments for the test, they should be the next string > +# after the "-append" option > +qemu_args=() > +cmd_args=() > +while (( "$#" )); do > + if [ "$1" = "-append" ]; then > + cmd_args=$2 > + shift 2 Does this work with params like this (2 words)? [pmu-cycle-counter] file = pmu.flat groups = pmu extra_params = -append 'cycle-counter 0' > + else > + qemu_args+=("$1") > + shift 1 > + fi > +done > + > +if [ "$EFI_CASE" = "_NO_FILE_4Uhere_" ]; then > + EFI_CASE=dummy > +fi > + > +: "${EFI_CASE_DIR:="$EFI_TEST/$EFI_CASE"}" > +mkdir -p "$EFI_CASE_DIR" > + > +cp "$EFI_SRC/$EFI_CASE.efi" "$EFI_TEST/$EFI_CASE/" > +echo "@echo -off" > "$EFI_TEST/$EFI_CASE/startup.nsh" > +echo "$EFI_CASE.efi" "${cmd_args[@]}" >> "$EFI_TEST/$EFI_CASE/startup.nsh" > + > +EFI_RUN=y $TEST_DIR/run \ > + -bios "$EFI_UEFI" \ > + -drive file.dir="$EFI_TEST/$EFI_CASE/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \ > + "${qemu_args[@]}" > diff --git a/arm/run b/arm/run > index 28a0b4a..e96875e 100755 > --- a/arm/run > +++ b/arm/run > @@ -67,7 +67,11 @@ fi > > A="-accel $ACCEL" > command="$qemu -nodefaults $M $A -cpu $processor $chr_testdev $pci_testdev" > -command+=" -display none -serial stdio -kernel" > +command+=" -display none -serial stdio" > command="$(migration_cmd) $(timeout_cmd) $command" > > -run_qemu $command "$@" > +if [ "$EFI_RUN" = "y" ]; then > + ENVIRON_DEFAULT=n run_qemu $command "$@" > +else > + run_qemu $command -kernel "$@" > +fi > diff --git a/arm/Makefile.common b/arm/Makefile.common > index a8007f4..aabd335 100644 > --- a/arm/Makefile.common > +++ b/arm/Makefile.common > @@ -12,6 +12,7 @@ tests-common += $(TEST_DIR)/gic.$(exe) > tests-common += $(TEST_DIR)/psci.$(exe) > tests-common += $(TEST_DIR)/sieve.$(exe) > tests-common += $(TEST_DIR)/pl031.$(exe) > +tests-common += $(TEST_DIR)/dummy.$(exe) > > tests-all = $(tests-common) $(tests) > all: directories $(tests-all) > diff --git a/arm/dummy.c b/arm/dummy.c > new file mode 100644 > index 0000000..5019e79 > --- /dev/null > +++ b/arm/dummy.c > @@ -0,0 +1,4 @@ > +int main(int argc, char **argv) > +{ > + return 0; > +} > -- > 2.25.1 >
On 22/06/2022 00:09, Ricardo Koller wrote: > On Fri, May 06, 2022 at 09:56:05PM +0100, Nikos Nikoleris wrote: >> This change adds a efi/run script inspired by the one in x86. This >> script will setup a folder with the test compiled as an EFI app and a >> startup.nsh script. The script launches QEMU providing an image with >> EDKII and the path to the folder with the test which is executed >> automatically. >> >> For example: >> >> $> ./arm/efi/run ./arm/selftest.efi setup smp=2 mem=256 >> >> Signed-off-by: Nikos Nikoleris <nikos.nikoleris@arm.com> >> --- >> scripts/runtime.bash | 14 +++++----- >> arm/efi/run | 61 ++++++++++++++++++++++++++++++++++++++++++++ >> arm/run | 8 ++++-- >> arm/Makefile.common | 1 + >> arm/dummy.c | 4 +++ >> 5 files changed, 78 insertions(+), 10 deletions(-) >> create mode 100755 arm/efi/run >> create mode 100644 arm/dummy.c >> >> diff --git a/scripts/runtime.bash b/scripts/runtime.bash >> index 7d0180b..dc28f24 100644 >> --- a/scripts/runtime.bash >> +++ b/scripts/runtime.bash >> @@ -131,14 +131,12 @@ function run() >> fi >> >> last_line=$(premature_failure > >(tail -1)) && { >> - skip=true >> - if [ "${CONFIG_EFI}" == "y" ] && [[ "${last_line}" =~ "enabling apic" ]]; then >> - skip=false >> - fi >> - if [ ${skip} == true ]; then >> - print_result "SKIP" $testname "" "$last_line" >> - return 77 >> - fi >> + if [ "${CONFIG_EFI}" == "y" ] && [ "${ARCH}" = x86_64 ]; then >> + if ! [[ "${last_line}" =~ "enabling apic" ]]; then >> + print_result "SKIP" $testname "" "$last_line" >> + return 77 >> + fi >> + fi >> } >> >> cmdline=$(get_cmdline $kernel) >> diff --git a/arm/efi/run b/arm/efi/run >> new file mode 100755 >> index 0000000..dfff717 >> --- /dev/null >> +++ b/arm/efi/run >> @@ -0,0 +1,61 @@ >> +#!/bin/bash >> + >> +set -e >> + >> +if [ $# -eq 0 ]; then >> + echo "Usage $0 TEST_CASE [QEMU_ARGS]" >> + exit 2 >> +fi >> + >> +if [ ! -f config.mak ]; then >> + echo "run './configure --enable-efi && make' first. See ./configure -h" >> + exit 2 >> +fi >> +source config.mak >> +source scripts/arch-run.bash >> +source scripts/common.bash >> + >> +: "${EFI_SRC:=$(realpath "$(dirname "$0")/../")}" >> +: "${EFI_UEFI:=/usr/share/qemu-efi-aarch64/QEMU_EFI.fd}" >> +: "${EFI_TEST:=efi-tests}" >> +: "${EFI_CASE:=$(basename $1 .efi)}" >> + >> +if [ ! -f "$EFI_UEFI" ]; then >> + echo "UEFI firmware not found: $EFI_UEFI" >> + echo "Please install the UEFI firmware to this path" >> + echo "Or specify the correct path with the env variable EFI_UEFI" >> + exit 2 >> +fi >> + >> +# Remove the TEST_CASE from $@ >> +shift 1 >> + >> +# Fish out the arguments for the test, they should be the next string >> +# after the "-append" option >> +qemu_args=() >> +cmd_args=() >> +while (( "$#" )); do >> + if [ "$1" = "-append" ]; then >> + cmd_args=$2 >> + shift 2 > > Does this work with params like this (2 words)? > > [pmu-cycle-counter] > file = pmu.flat > groups = pmu > extra_params = -append 'cycle-counter 0' > I think it does. cmd_args will take the value of the string that follows append and in this case whatever is between the single/double quotes. Thanks, Nikos >> + else >> + qemu_args+=("$1") >> + shift 1 >> + fi >> +done >> + >> +if [ "$EFI_CASE" = "_NO_FILE_4Uhere_" ]; then >> + EFI_CASE=dummy >> +fi >> + >> +: "${EFI_CASE_DIR:="$EFI_TEST/$EFI_CASE"}" >> +mkdir -p "$EFI_CASE_DIR" >> + >> +cp "$EFI_SRC/$EFI_CASE.efi" "$EFI_TEST/$EFI_CASE/" >> +echo "@echo -off" > "$EFI_TEST/$EFI_CASE/startup.nsh" >> +echo "$EFI_CASE.efi" "${cmd_args[@]}" >> "$EFI_TEST/$EFI_CASE/startup.nsh" >> + >> +EFI_RUN=y $TEST_DIR/run \ >> + -bios "$EFI_UEFI" \ >> + -drive file.dir="$EFI_TEST/$EFI_CASE/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \ >> + "${qemu_args[@]}" >> diff --git a/arm/run b/arm/run >> index 28a0b4a..e96875e 100755 >> --- a/arm/run >> +++ b/arm/run >> @@ -67,7 +67,11 @@ fi >> >> A="-accel $ACCEL" >> command="$qemu -nodefaults $M $A -cpu $processor $chr_testdev $pci_testdev" >> -command+=" -display none -serial stdio -kernel" >> +command+=" -display none -serial stdio" >> command="$(migration_cmd) $(timeout_cmd) $command" >> >> -run_qemu $command "$@" >> +if [ "$EFI_RUN" = "y" ]; then >> + ENVIRON_DEFAULT=n run_qemu $command "$@" >> +else >> + run_qemu $command -kernel "$@" >> +fi >> diff --git a/arm/Makefile.common b/arm/Makefile.common >> index a8007f4..aabd335 100644 >> --- a/arm/Makefile.common >> +++ b/arm/Makefile.common >> @@ -12,6 +12,7 @@ tests-common += $(TEST_DIR)/gic.$(exe) >> tests-common += $(TEST_DIR)/psci.$(exe) >> tests-common += $(TEST_DIR)/sieve.$(exe) >> tests-common += $(TEST_DIR)/pl031.$(exe) >> +tests-common += $(TEST_DIR)/dummy.$(exe) >> >> tests-all = $(tests-common) $(tests) >> all: directories $(tests-all) >> diff --git a/arm/dummy.c b/arm/dummy.c >> new file mode 100644 >> index 0000000..5019e79 >> --- /dev/null >> +++ b/arm/dummy.c >> @@ -0,0 +1,4 @@ >> +int main(int argc, char **argv) >> +{ >> + return 0; >> +} >> -- >> 2.25.1 >> IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
On Wed, Jun 22, 2022 at 03:13:56PM +0100, Nikos Nikoleris wrote: > On 22/06/2022 00:09, Ricardo Koller wrote: > > On Fri, May 06, 2022 at 09:56:05PM +0100, Nikos Nikoleris wrote: > > > This change adds a efi/run script inspired by the one in x86. This > > > script will setup a folder with the test compiled as an EFI app and a > > > startup.nsh script. The script launches QEMU providing an image with > > > EDKII and the path to the folder with the test which is executed > > > automatically. > > > > > > For example: > > > > > > $> ./arm/efi/run ./arm/selftest.efi setup smp=2 mem=256 > > > > > > Signed-off-by: Nikos Nikoleris <nikos.nikoleris@arm.com> > > > --- > > > scripts/runtime.bash | 14 +++++----- > > > arm/efi/run | 61 ++++++++++++++++++++++++++++++++++++++++++++ > > > arm/run | 8 ++++-- > > > arm/Makefile.common | 1 + > > > arm/dummy.c | 4 +++ > > > 5 files changed, 78 insertions(+), 10 deletions(-) > > > create mode 100755 arm/efi/run > > > create mode 100644 arm/dummy.c > > > > > > diff --git a/scripts/runtime.bash b/scripts/runtime.bash > > > index 7d0180b..dc28f24 100644 > > > --- a/scripts/runtime.bash > > > +++ b/scripts/runtime.bash > > > @@ -131,14 +131,12 @@ function run() > > > fi > > > > > > last_line=$(premature_failure > >(tail -1)) && { > > > - skip=true > > > - if [ "${CONFIG_EFI}" == "y" ] && [[ "${last_line}" =~ "enabling apic" ]]; then > > > - skip=false > > > - fi > > > - if [ ${skip} == true ]; then > > > - print_result "SKIP" $testname "" "$last_line" > > > - return 77 > > > - fi > > > + if [ "${CONFIG_EFI}" == "y" ] && [ "${ARCH}" = x86_64 ]; then > > > + if ! [[ "${last_line}" =~ "enabling apic" ]]; then > > > + print_result "SKIP" $testname "" "$last_line" > > > + return 77 > > > + fi > > > + fi > > > } > > > > > > cmdline=$(get_cmdline $kernel) > > > diff --git a/arm/efi/run b/arm/efi/run > > > new file mode 100755 > > > index 0000000..dfff717 > > > --- /dev/null > > > +++ b/arm/efi/run > > > @@ -0,0 +1,61 @@ > > > +#!/bin/bash > > > + > > > +set -e > > > + > > > +if [ $# -eq 0 ]; then > > > + echo "Usage $0 TEST_CASE [QEMU_ARGS]" > > > + exit 2 > > > +fi > > > + > > > +if [ ! -f config.mak ]; then > > > + echo "run './configure --enable-efi && make' first. See ./configure -h" > > > + exit 2 > > > +fi > > > +source config.mak > > > +source scripts/arch-run.bash > > > +source scripts/common.bash > > > + > > > +: "${EFI_SRC:=$(realpath "$(dirname "$0")/../")}" > > > +: "${EFI_UEFI:=/usr/share/qemu-efi-aarch64/QEMU_EFI.fd}" > > > +: "${EFI_TEST:=efi-tests}" > > > +: "${EFI_CASE:=$(basename $1 .efi)}" > > > + > > > +if [ ! -f "$EFI_UEFI" ]; then > > > + echo "UEFI firmware not found: $EFI_UEFI" > > > + echo "Please install the UEFI firmware to this path" > > > + echo "Or specify the correct path with the env variable EFI_UEFI" > > > + exit 2 > > > +fi > > > + > > > +# Remove the TEST_CASE from $@ > > > +shift 1 > > > + > > > +# Fish out the arguments for the test, they should be the next string > > > +# after the "-append" option > > > +qemu_args=() > > > +cmd_args=() > > > +while (( "$#" )); do > > > + if [ "$1" = "-append" ]; then > > > + cmd_args=$2 > > > + shift 2 > > > > Does this work with params like this (2 words)? > > > > [pmu-cycle-counter] > > file = pmu.flat > > groups = pmu > > extra_params = -append 'cycle-counter 0' > > > > I think it does. cmd_args will take the value of the string that follows > append and in this case whatever is between the single/double quotes. Just in case I tested it on bash and it works as expected. So, with that: Reviewed-by: Ricardo Koller <ricarkol@google.com>
diff --git a/scripts/runtime.bash b/scripts/runtime.bash index 7d0180b..dc28f24 100644 --- a/scripts/runtime.bash +++ b/scripts/runtime.bash @@ -131,14 +131,12 @@ function run() fi last_line=$(premature_failure > >(tail -1)) && { - skip=true - if [ "${CONFIG_EFI}" == "y" ] && [[ "${last_line}" =~ "enabling apic" ]]; then - skip=false - fi - if [ ${skip} == true ]; then - print_result "SKIP" $testname "" "$last_line" - return 77 - fi + if [ "${CONFIG_EFI}" == "y" ] && [ "${ARCH}" = x86_64 ]; then + if ! [[ "${last_line}" =~ "enabling apic" ]]; then + print_result "SKIP" $testname "" "$last_line" + return 77 + fi + fi } cmdline=$(get_cmdline $kernel) diff --git a/arm/efi/run b/arm/efi/run new file mode 100755 index 0000000..dfff717 --- /dev/null +++ b/arm/efi/run @@ -0,0 +1,61 @@ +#!/bin/bash + +set -e + +if [ $# -eq 0 ]; then + echo "Usage $0 TEST_CASE [QEMU_ARGS]" + exit 2 +fi + +if [ ! -f config.mak ]; then + echo "run './configure --enable-efi && make' first. See ./configure -h" + exit 2 +fi +source config.mak +source scripts/arch-run.bash +source scripts/common.bash + +: "${EFI_SRC:=$(realpath "$(dirname "$0")/../")}" +: "${EFI_UEFI:=/usr/share/qemu-efi-aarch64/QEMU_EFI.fd}" +: "${EFI_TEST:=efi-tests}" +: "${EFI_CASE:=$(basename $1 .efi)}" + +if [ ! -f "$EFI_UEFI" ]; then + echo "UEFI firmware not found: $EFI_UEFI" + echo "Please install the UEFI firmware to this path" + echo "Or specify the correct path with the env variable EFI_UEFI" + exit 2 +fi + +# Remove the TEST_CASE from $@ +shift 1 + +# Fish out the arguments for the test, they should be the next string +# after the "-append" option +qemu_args=() +cmd_args=() +while (( "$#" )); do + if [ "$1" = "-append" ]; then + cmd_args=$2 + shift 2 + else + qemu_args+=("$1") + shift 1 + fi +done + +if [ "$EFI_CASE" = "_NO_FILE_4Uhere_" ]; then + EFI_CASE=dummy +fi + +: "${EFI_CASE_DIR:="$EFI_TEST/$EFI_CASE"}" +mkdir -p "$EFI_CASE_DIR" + +cp "$EFI_SRC/$EFI_CASE.efi" "$EFI_TEST/$EFI_CASE/" +echo "@echo -off" > "$EFI_TEST/$EFI_CASE/startup.nsh" +echo "$EFI_CASE.efi" "${cmd_args[@]}" >> "$EFI_TEST/$EFI_CASE/startup.nsh" + +EFI_RUN=y $TEST_DIR/run \ + -bios "$EFI_UEFI" \ + -drive file.dir="$EFI_TEST/$EFI_CASE/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \ + "${qemu_args[@]}" diff --git a/arm/run b/arm/run index 28a0b4a..e96875e 100755 --- a/arm/run +++ b/arm/run @@ -67,7 +67,11 @@ fi A="-accel $ACCEL" command="$qemu -nodefaults $M $A -cpu $processor $chr_testdev $pci_testdev" -command+=" -display none -serial stdio -kernel" +command+=" -display none -serial stdio" command="$(migration_cmd) $(timeout_cmd) $command" -run_qemu $command "$@" +if [ "$EFI_RUN" = "y" ]; then + ENVIRON_DEFAULT=n run_qemu $command "$@" +else + run_qemu $command -kernel "$@" +fi diff --git a/arm/Makefile.common b/arm/Makefile.common index a8007f4..aabd335 100644 --- a/arm/Makefile.common +++ b/arm/Makefile.common @@ -12,6 +12,7 @@ tests-common += $(TEST_DIR)/gic.$(exe) tests-common += $(TEST_DIR)/psci.$(exe) tests-common += $(TEST_DIR)/sieve.$(exe) tests-common += $(TEST_DIR)/pl031.$(exe) +tests-common += $(TEST_DIR)/dummy.$(exe) tests-all = $(tests-common) $(tests) all: directories $(tests-all) diff --git a/arm/dummy.c b/arm/dummy.c new file mode 100644 index 0000000..5019e79 --- /dev/null +++ b/arm/dummy.c @@ -0,0 +1,4 @@ +int main(int argc, char **argv) +{ + return 0; +}
This change adds a efi/run script inspired by the one in x86. This script will setup a folder with the test compiled as an EFI app and a startup.nsh script. The script launches QEMU providing an image with EDKII and the path to the folder with the test which is executed automatically. For example: $> ./arm/efi/run ./arm/selftest.efi setup smp=2 mem=256 Signed-off-by: Nikos Nikoleris <nikos.nikoleris@arm.com> --- scripts/runtime.bash | 14 +++++----- arm/efi/run | 61 ++++++++++++++++++++++++++++++++++++++++++++ arm/run | 8 ++++-- arm/Makefile.common | 1 + arm/dummy.c | 4 +++ 5 files changed, 78 insertions(+), 10 deletions(-) create mode 100755 arm/efi/run create mode 100644 arm/dummy.c