From 0119c894ab0dc468bcb03f28063239c0a4cf970f Mon Sep 17 00:00:00 2001 From: Tomeu Vizoso Date: Fri, 11 Aug 2023 14:19:53 -0300 Subject: drm: Add initial ci/ subdirectory Developers can easily execute several tests on different devices by just pushing their branch to their fork in a repository hosted on gitlab.freedesktop.org which has an infrastructure to run jobs in several runners and farms with different devices. There are also other automated tools that uprev dependencies, monitor the infra, and so on that are already used by the Mesa project, and we can reuse them too. Also, store expectations about what the DRM drivers are supposed to pass in the IGT test suite. By storing the test expectations along with the code, we can make sure both stay in sync with each other so we can know when a code change breaks those expectations. Also, include a configuration file that points to the out-of-tree CI scripts. This will allow all contributors to drm to reuse the infrastructure already in gitlab.freedesktop.org to test the driver on several generations of the hardware. Signed-off-by: Tomeu Vizoso Signed-off-by: Helen Koike Acked-by: Daniel Stone Acked-by: Rob Clark Tested-by: Rob Clark [sima: Remove top-level empty file test, spotted by sfr] Signed-off-by: Daniel Vetter Link: https://patchwork.freedesktop.org/patch/msgid/20230811171953.176431-1-helen.koike@collabora.com --- drivers/gpu/drm/ci/arm.config | 69 + drivers/gpu/drm/ci/arm64.config | 199 ++ drivers/gpu/drm/ci/build-igt.sh | 35 + drivers/gpu/drm/ci/build.sh | 157 ++ drivers/gpu/drm/ci/build.yml | 110 + drivers/gpu/drm/ci/check-patch.py | 57 + drivers/gpu/drm/ci/container.yml | 65 + drivers/gpu/drm/ci/gitlab-ci.yml | 251 ++ drivers/gpu/drm/ci/igt_runner.sh | 77 + drivers/gpu/drm/ci/image-tags.yml | 15 + drivers/gpu/drm/ci/lava-submit.sh | 57 + drivers/gpu/drm/ci/static-checks.yml | 12 + drivers/gpu/drm/ci/test.yml | 335 +++ drivers/gpu/drm/ci/testlist.txt | 2912 ++++++++++++++++++++ drivers/gpu/drm/ci/x86_64.config | 111 + drivers/gpu/drm/ci/xfails/amdgpu-stoney-fails.txt | 19 + drivers/gpu/drm/ci/xfails/amdgpu-stoney-flakes.txt | 21 + drivers/gpu/drm/ci/xfails/amdgpu-stoney-skips.txt | 2 + drivers/gpu/drm/ci/xfails/i915-amly-fails.txt | 17 + drivers/gpu/drm/ci/xfails/i915-amly-flakes.txt | 32 + drivers/gpu/drm/ci/xfails/i915-amly-skips.txt | 4 + drivers/gpu/drm/ci/xfails/i915-apl-fails.txt | 58 + drivers/gpu/drm/ci/xfails/i915-apl-flakes.txt | 1 + drivers/gpu/drm/ci/xfails/i915-apl-skips.txt | 6 + drivers/gpu/drm/ci/xfails/i915-cml-fails.txt | 18 + drivers/gpu/drm/ci/xfails/i915-cml-flakes.txt | 38 + drivers/gpu/drm/ci/xfails/i915-cml-skips.txt | 2 + drivers/gpu/drm/ci/xfails/i915-glk-fails.txt | 19 + drivers/gpu/drm/ci/xfails/i915-glk-flakes.txt | 41 + drivers/gpu/drm/ci/xfails/i915-glk-skips.txt | 5 + drivers/gpu/drm/ci/xfails/i915-kbl-fails.txt | 25 + drivers/gpu/drm/ci/xfails/i915-kbl-flakes.txt | 26 + drivers/gpu/drm/ci/xfails/i915-kbl-skips.txt | 5 + drivers/gpu/drm/ci/xfails/i915-tgl-fails.txt | 37 + drivers/gpu/drm/ci/xfails/i915-tgl-flakes.txt | 5 + drivers/gpu/drm/ci/xfails/i915-tgl-skips.txt | 11 + drivers/gpu/drm/ci/xfails/i915-whl-fails.txt | 48 + drivers/gpu/drm/ci/xfails/i915-whl-flakes.txt | 1 + drivers/gpu/drm/ci/xfails/i915-whl-skips.txt | 2 + .../gpu/drm/ci/xfails/mediatek-mt8173-fails.txt | 29 + .../gpu/drm/ci/xfails/mediatek-mt8173-flakes.txt | 0 .../gpu/drm/ci/xfails/mediatek-mt8183-fails.txt | 10 + .../gpu/drm/ci/xfails/mediatek-mt8183-flakes.txt | 14 + drivers/gpu/drm/ci/xfails/meson-g12b-fails.txt | 12 + drivers/gpu/drm/ci/xfails/meson-g12b-flakes.txt | 4 + drivers/gpu/drm/ci/xfails/msm-apq8016-fails.txt | 15 + drivers/gpu/drm/ci/xfails/msm-apq8016-flakes.txt | 4 + drivers/gpu/drm/ci/xfails/msm-apq8096-fails.txt | 2 + drivers/gpu/drm/ci/xfails/msm-apq8096-flakes.txt | 4 + drivers/gpu/drm/ci/xfails/msm-apq8096-skips.txt | 2 + drivers/gpu/drm/ci/xfails/msm-sc7180-fails.txt | 25 + drivers/gpu/drm/ci/xfails/msm-sc7180-flakes.txt | 7 + drivers/gpu/drm/ci/xfails/msm-sc7180-skips.txt | 23 + drivers/gpu/drm/ci/xfails/msm-sdm845-fails.txt | 68 + drivers/gpu/drm/ci/xfails/msm-sdm845-flakes.txt | 11 + drivers/gpu/drm/ci/xfails/msm-sdm845-skips.txt | 2 + .../gpu/drm/ci/xfails/rockchip-rk3288-fails.txt | 48 + .../gpu/drm/ci/xfails/rockchip-rk3288-flakes.txt | 9 + .../gpu/drm/ci/xfails/rockchip-rk3288-skips.txt | 52 + .../gpu/drm/ci/xfails/rockchip-rk3399-fails.txt | 37 + .../gpu/drm/ci/xfails/rockchip-rk3399-flakes.txt | 23 + .../gpu/drm/ci/xfails/rockchip-rk3399-skips.txt | 5 + .../gpu/drm/ci/xfails/virtio_gpu-none-fails.txt | 38 + .../gpu/drm/ci/xfails/virtio_gpu-none-flakes.txt | 0 .../gpu/drm/ci/xfails/virtio_gpu-none-skips.txt | 6 + 65 files changed, 5355 insertions(+) create mode 100644 drivers/gpu/drm/ci/arm.config create mode 100644 drivers/gpu/drm/ci/arm64.config create mode 100644 drivers/gpu/drm/ci/build-igt.sh create mode 100644 drivers/gpu/drm/ci/build.sh create mode 100644 drivers/gpu/drm/ci/build.yml create mode 100755 drivers/gpu/drm/ci/check-patch.py create mode 100644 drivers/gpu/drm/ci/container.yml create mode 100644 drivers/gpu/drm/ci/gitlab-ci.yml create mode 100755 drivers/gpu/drm/ci/igt_runner.sh create mode 100644 drivers/gpu/drm/ci/image-tags.yml create mode 100755 drivers/gpu/drm/ci/lava-submit.sh create mode 100644 drivers/gpu/drm/ci/static-checks.yml create mode 100644 drivers/gpu/drm/ci/test.yml create mode 100644 drivers/gpu/drm/ci/testlist.txt create mode 100644 drivers/gpu/drm/ci/x86_64.config create mode 100644 drivers/gpu/drm/ci/xfails/amdgpu-stoney-fails.txt create mode 100644 drivers/gpu/drm/ci/xfails/amdgpu-stoney-flakes.txt create mode 100644 drivers/gpu/drm/ci/xfails/amdgpu-stoney-skips.txt create mode 100644 drivers/gpu/drm/ci/xfails/i915-amly-fails.txt create mode 100644 drivers/gpu/drm/ci/xfails/i915-amly-flakes.txt create mode 100644 drivers/gpu/drm/ci/xfails/i915-amly-skips.txt create mode 100644 drivers/gpu/drm/ci/xfails/i915-apl-fails.txt create mode 100644 drivers/gpu/drm/ci/xfails/i915-apl-flakes.txt create mode 100644 drivers/gpu/drm/ci/xfails/i915-apl-skips.txt create mode 100644 drivers/gpu/drm/ci/xfails/i915-cml-fails.txt create mode 100644 drivers/gpu/drm/ci/xfails/i915-cml-flakes.txt create mode 100644 drivers/gpu/drm/ci/xfails/i915-cml-skips.txt create mode 100644 drivers/gpu/drm/ci/xfails/i915-glk-fails.txt create mode 100644 drivers/gpu/drm/ci/xfails/i915-glk-flakes.txt create mode 100644 drivers/gpu/drm/ci/xfails/i915-glk-skips.txt create mode 100644 drivers/gpu/drm/ci/xfails/i915-kbl-fails.txt create mode 100644 drivers/gpu/drm/ci/xfails/i915-kbl-flakes.txt create mode 100644 drivers/gpu/drm/ci/xfails/i915-kbl-skips.txt create mode 100644 drivers/gpu/drm/ci/xfails/i915-tgl-fails.txt create mode 100644 drivers/gpu/drm/ci/xfails/i915-tgl-flakes.txt create mode 100644 drivers/gpu/drm/ci/xfails/i915-tgl-skips.txt create mode 100644 drivers/gpu/drm/ci/xfails/i915-whl-fails.txt create mode 100644 drivers/gpu/drm/ci/xfails/i915-whl-flakes.txt create mode 100644 drivers/gpu/drm/ci/xfails/i915-whl-skips.txt create mode 100644 drivers/gpu/drm/ci/xfails/mediatek-mt8173-fails.txt create mode 100644 drivers/gpu/drm/ci/xfails/mediatek-mt8173-flakes.txt create mode 100644 drivers/gpu/drm/ci/xfails/mediatek-mt8183-fails.txt create mode 100644 drivers/gpu/drm/ci/xfails/mediatek-mt8183-flakes.txt create mode 100644 drivers/gpu/drm/ci/xfails/meson-g12b-fails.txt create mode 100644 drivers/gpu/drm/ci/xfails/meson-g12b-flakes.txt create mode 100644 drivers/gpu/drm/ci/xfails/msm-apq8016-fails.txt create mode 100644 drivers/gpu/drm/ci/xfails/msm-apq8016-flakes.txt create mode 100644 drivers/gpu/drm/ci/xfails/msm-apq8096-fails.txt create mode 100644 drivers/gpu/drm/ci/xfails/msm-apq8096-flakes.txt create mode 100644 drivers/gpu/drm/ci/xfails/msm-apq8096-skips.txt create mode 100644 drivers/gpu/drm/ci/xfails/msm-sc7180-fails.txt create mode 100644 drivers/gpu/drm/ci/xfails/msm-sc7180-flakes.txt create mode 100644 drivers/gpu/drm/ci/xfails/msm-sc7180-skips.txt create mode 100644 drivers/gpu/drm/ci/xfails/msm-sdm845-fails.txt create mode 100644 drivers/gpu/drm/ci/xfails/msm-sdm845-flakes.txt create mode 100644 drivers/gpu/drm/ci/xfails/msm-sdm845-skips.txt create mode 100644 drivers/gpu/drm/ci/xfails/rockchip-rk3288-fails.txt create mode 100644 drivers/gpu/drm/ci/xfails/rockchip-rk3288-flakes.txt create mode 100644 drivers/gpu/drm/ci/xfails/rockchip-rk3288-skips.txt create mode 100644 drivers/gpu/drm/ci/xfails/rockchip-rk3399-fails.txt create mode 100644 drivers/gpu/drm/ci/xfails/rockchip-rk3399-flakes.txt create mode 100644 drivers/gpu/drm/ci/xfails/rockchip-rk3399-skips.txt create mode 100644 drivers/gpu/drm/ci/xfails/virtio_gpu-none-fails.txt create mode 100644 drivers/gpu/drm/ci/xfails/virtio_gpu-none-flakes.txt create mode 100644 drivers/gpu/drm/ci/xfails/virtio_gpu-none-skips.txt (limited to 'drivers') diff --git a/drivers/gpu/drm/ci/arm.config b/drivers/gpu/drm/ci/arm.config new file mode 100644 index 000000000000..871f4de063ad --- /dev/null +++ b/drivers/gpu/drm/ci/arm.config @@ -0,0 +1,69 @@ +CONFIG_LOCALVERSION_AUTO=y +CONFIG_DEBUG_KERNEL=y + +CONFIG_CRYPTO_ZSTD=y +CONFIG_ZRAM_MEMORY_TRACKING=y +CONFIG_ZRAM_WRITEBACK=y +CONFIG_ZRAM=y +CONFIG_ZSMALLOC_STAT=y + +# abootimg with a 'dummy' rootfs fails with root=/dev/nfs +CONFIG_BLK_DEV_INITRD=n + +CONFIG_DEVFREQ_GOV_PERFORMANCE=y +CONFIG_DEVFREQ_GOV_POWERSAVE=y +CONFIG_DEVFREQ_GOV_USERSPACE=y +CONFIG_DEVFREQ_GOV_PASSIVE=y +CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y + +CONFIG_DRM=y +CONFIG_DRM_ETNAVIV=y +CONFIG_DRM_ROCKCHIP=y +CONFIG_DRM_PANFROST=y +CONFIG_DRM_LIMA=y +CONFIG_DRM_PANEL_SIMPLE=y +CONFIG_PWM_CROS_EC=y +CONFIG_BACKLIGHT_PWM=y + +CONFIG_ROCKCHIP_CDN_DP=n + +CONFIG_SPI_ROCKCHIP=y +CONFIG_PWM_ROCKCHIP=y +CONFIG_PHY_ROCKCHIP_DP=y +CONFIG_DWMAC_ROCKCHIP=y + +CONFIG_MFD_RK808=y +CONFIG_REGULATOR_RK808=y +CONFIG_RTC_DRV_RK808=y +CONFIG_COMMON_CLK_RK808=y + +CONFIG_REGULATOR_FAN53555=y +CONFIG_REGULATOR=y + +CONFIG_REGULATOR_VCTRL=y + +CONFIG_KASAN=n +CONFIG_KASAN_INLINE=n +CONFIG_STACKTRACE=n + +CONFIG_TMPFS=y + +CONFIG_PROVE_LOCKING=n +CONFIG_DEBUG_LOCKDEP=n +CONFIG_SOFTLOCKUP_DETECTOR=n +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=n + +CONFIG_FW_LOADER_COMPRESS=y + +CONFIG_USB_USBNET=y +CONFIG_NETDEVICES=y +CONFIG_USB_NET_DRIVERS=y +CONFIG_USB_RTL8152=y +CONFIG_USB_NET_AX8817X=y +CONFIG_USB_NET_SMSC95XX=y + +# TK1 +CONFIG_ARM_TEGRA_DEVFREQ=y + +# 32-bit build failure +CONFIG_DRM_MSM=n diff --git a/drivers/gpu/drm/ci/arm64.config b/drivers/gpu/drm/ci/arm64.config new file mode 100644 index 000000000000..817e18ddfd4f --- /dev/null +++ b/drivers/gpu/drm/ci/arm64.config @@ -0,0 +1,199 @@ +CONFIG_LOCALVERSION_AUTO=y +CONFIG_DEBUG_KERNEL=y + +CONFIG_CRYPTO_ZSTD=y +CONFIG_ZRAM_MEMORY_TRACKING=y +CONFIG_ZRAM_WRITEBACK=y +CONFIG_ZRAM=y +CONFIG_ZSMALLOC_STAT=y + +# abootimg with a 'dummy' rootfs fails with root=/dev/nfs +CONFIG_BLK_DEV_INITRD=n + +CONFIG_DEVFREQ_GOV_PERFORMANCE=y +CONFIG_DEVFREQ_GOV_POWERSAVE=y +CONFIG_DEVFREQ_GOV_USERSPACE=y +CONFIG_DEVFREQ_GOV_PASSIVE=y + +CONFIG_DRM=y +CONFIG_DRM_ROCKCHIP=y +CONFIG_DRM_PANFROST=y +CONFIG_DRM_LIMA=y +CONFIG_DRM_PANEL_SIMPLE=y +CONFIG_DRM_PANEL_EDP=y +CONFIG_DRM_MSM=y +CONFIG_DRM_ETNAVIV=y +CONFIG_DRM_I2C_ADV7511=y +CONFIG_PWM_CROS_EC=y +CONFIG_BACKLIGHT_PWM=y + +CONFIG_ROCKCHIP_CDN_DP=n + +CONFIG_SPI_ROCKCHIP=y +CONFIG_PWM_ROCKCHIP=y +CONFIG_PHY_ROCKCHIP_DP=y +CONFIG_DWMAC_ROCKCHIP=y +CONFIG_STMMAC_ETH=y +CONFIG_TYPEC_FUSB302=y +CONFIG_TYPEC=y +CONFIG_TYPEC_TCPM=y + +# MSM platform bits + +# For CONFIG_QCOM_LMH +CONFIG_OF=y + +CONFIG_ARM_SMMU_QCOM=y +CONFIG_QCOM_COMMAND_DB=y +CONFIG_QCOM_RPMHPD=y +CONFIG_QCOM_RPMPD=y +CONFIG_QCOM_OCMEM=y +CONFIG_SDM_GPUCC_845=y +CONFIG_SDM_VIDEOCC_845=y +CONFIG_SDM_DISPCC_845=y +CONFIG_SDM_LPASSCC_845=y +CONFIG_SDM_CAMCC_845=y +CONFIG_RESET_QCOM_PDC=y +CONFIG_DRM_TI_SN65DSI86=y +CONFIG_I2C_QCOM_GENI=y +CONFIG_SPI_QCOM_GENI=y +CONFIG_PHY_QCOM_QUSB2=y +CONFIG_PHY_QCOM_QMP=y +CONFIG_MSM_GCC_8996=y +CONFIG_QCOM_CLK_APCC_MSM8996=y +CONFIG_QCOM_LLCC=y +CONFIG_QCOM_LMH=y +CONFIG_QCOM_SPMI_TEMP_ALARM=y +CONFIG_QCOM_WDT=y +CONFIG_POWER_RESET_QCOM_PON=y +CONFIG_RTC_DRV_PM8XXX=y +CONFIG_INTERCONNECT=y +CONFIG_INTERCONNECT_QCOM=y +CONFIG_INTERCONNECT_QCOM_MSM8996=y +CONFIG_INTERCONNECT_QCOM_SDM845=y +CONFIG_INTERCONNECT_QCOM_MSM8916=y +CONFIG_INTERCONNECT_QCOM_MSM8996=y +CONFIG_INTERCONNECT_QCOM_OSM_L3=y +CONFIG_INTERCONNECT_QCOM_SC7180=y +CONFIG_INTERCONNECT_QCOM_SM8350=y +CONFIG_CRYPTO_DEV_QCOM_RNG=y +CONFIG_SC_DISPCC_7180=y +CONFIG_SC_GPUCC_7180=y +CONFIG_SM_GPUCC_8350=y +CONFIG_QCOM_SPMI_ADC5=y +CONFIG_DRM_PARADE_PS8640=y +CONFIG_DRM_LONTIUM_LT9611UXC=y +CONFIG_PHY_QCOM_USB_HS=y +CONFIG_QCOM_GPI_DMA=y +CONFIG_USB_ONBOARD_HUB=y +CONFIG_NVMEM_QCOM_QFPROM=y +CONFIG_PHY_QCOM_USB_SNPS_FEMTO_V2=y + + +# db410c ethernet +CONFIG_USB_RTL8152=y +# db820c ethernet +CONFIG_ATL1C=y +# Chromebooks ethernet +CONFIG_USB_ONBOARD_HUB=y +# 888 HDK ethernet +CONFIG_USB_LAN78XX=y + +CONFIG_ARCH_ALPINE=n +CONFIG_ARCH_BCM2835=y +CONFIG_ARCH_BCM_IPROC=n +CONFIG_ARCH_BERLIN=n +CONFIG_ARCH_BRCMSTB=n +CONFIG_ARCH_EXYNOS=n +CONFIG_ARCH_K3=n +CONFIG_ARCH_LAYERSCAPE=n +CONFIG_ARCH_LG1K=n +CONFIG_ARCH_HISI=n +CONFIG_ARCH_MVEBU=n +CONFIG_ARCH_SEATTLE=n +CONFIG_ARCH_SYNQUACER=n +CONFIG_ARCH_RENESAS=n +CONFIG_ARCH_R8A774A1=n +CONFIG_ARCH_R8A774C0=n +CONFIG_ARCH_R8A7795=n +CONFIG_ARCH_R8A7796=n +CONFIG_ARCH_R8A77965=n +CONFIG_ARCH_R8A77970=n +CONFIG_ARCH_R8A77980=n +CONFIG_ARCH_R8A77990=n +CONFIG_ARCH_R8A77995=n +CONFIG_ARCH_STRATIX10=n +CONFIG_ARCH_TEGRA=n +CONFIG_ARCH_SPRD=n +CONFIG_ARCH_THUNDER=n +CONFIG_ARCH_THUNDER2=n +CONFIG_ARCH_UNIPHIER=n +CONFIG_ARCH_VEXPRESS=n +CONFIG_ARCH_XGENE=n +CONFIG_ARCH_ZX=n +CONFIG_ARCH_ZYNQMP=n + +# Strip out some stuff we don't need for graphics testing, to reduce +# the build. +CONFIG_CAN=n +CONFIG_WIRELESS=n +CONFIG_RFKILL=n +CONFIG_WLAN=n + +CONFIG_REGULATOR_FAN53555=y +CONFIG_REGULATOR=y + +CONFIG_REGULATOR_VCTRL=y + +CONFIG_KASAN=n +CONFIG_KASAN_INLINE=n +CONFIG_STACKTRACE=n + +CONFIG_TMPFS=y + +CONFIG_PROVE_LOCKING=n +CONFIG_DEBUG_LOCKDEP=n +CONFIG_SOFTLOCKUP_DETECTOR=y +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y + +CONFIG_DETECT_HUNG_TASK=y + +CONFIG_FW_LOADER_COMPRESS=y +CONFIG_FW_LOADER_USER_HELPER=n + +CONFIG_USB_USBNET=y +CONFIG_NETDEVICES=y +CONFIG_USB_NET_DRIVERS=y +CONFIG_USB_RTL8152=y +CONFIG_USB_NET_AX8817X=y +CONFIG_USB_NET_SMSC95XX=y + +# For amlogic +CONFIG_MESON_GXL_PHY=y +CONFIG_MDIO_BUS_MUX_MESON_G12A=y +CONFIG_DRM_MESON=y + +# For Mediatek +CONFIG_DRM_MEDIATEK=y +CONFIG_PWM_MEDIATEK=y +CONFIG_DRM_MEDIATEK_HDMI=y +CONFIG_GNSS=y +CONFIG_GNSS_MTK_SERIAL=y +CONFIG_HW_RANDOM=y +CONFIG_HW_RANDOM_MTK=y +CONFIG_MTK_DEVAPC=y +CONFIG_PWM_MTK_DISP=y +CONFIG_MTK_CMDQ=y + +# For nouveau. Note that DRM must be a module so that it's loaded after NFS is up to provide the firmware. +CONFIG_ARCH_TEGRA=y +CONFIG_DRM_NOUVEAU=m +CONFIG_DRM_TEGRA=m +CONFIG_R8169=y +CONFIG_STAGING=y +CONFIG_DRM_TEGRA_STAGING=y +CONFIG_TEGRA_HOST1X=y +CONFIG_ARM_TEGRA_DEVFREQ=y +CONFIG_TEGRA_SOCTHERM=y +CONFIG_DRM_TEGRA_DEBUG=y +CONFIG_PWM_TEGRA=y diff --git a/drivers/gpu/drm/ci/build-igt.sh b/drivers/gpu/drm/ci/build-igt.sh new file mode 100644 index 000000000000..500fa4f5c30a --- /dev/null +++ b/drivers/gpu/drm/ci/build-igt.sh @@ -0,0 +1,35 @@ +#!/bin/bash +# SPDX-License-Identifier: MIT + +set -ex + +git clone https://gitlab.freedesktop.org/drm/igt-gpu-tools.git --single-branch --no-checkout +cd igt-gpu-tools +git checkout $IGT_VERSION + +if [[ "$KERNEL_ARCH" = "arm" ]]; then + . ../.gitlab-ci/container/create-cross-file.sh armhf + EXTRA_MESON_ARGS="--cross-file /cross_file-armhf.txt" +fi + +MESON_OPTIONS="-Doverlay=disabled \ + -Dchamelium=disabled \ + -Dvalgrind=disabled \ + -Dman=enabled \ + -Dtests=enabled \ + -Drunner=enabled \ + -Dlibunwind=enabled \ + -Dprefix=/igt" + +mkdir -p /igt +meson build $MESON_OPTIONS $EXTRA_MESON_ARGS +ninja -C build -j${FDO_CI_CONCURRENT:-4} || ninja -C build -j 1 +ninja -C build install + +mkdir -p artifacts/ +tar -cf artifacts/igt.tar /igt + +# Pass needed files to the test stage +S3_ARTIFACT_NAME="igt.tar.gz" +gzip -c artifacts/igt.tar > ${S3_ARTIFACT_NAME} +ci-fairy s3cp --token-file "${CI_JOB_JWT_FILE}" ${S3_ARTIFACT_NAME} https://${PIPELINE_ARTIFACTS_BASE}/${KERNEL_ARCH}/${S3_ARTIFACT_NAME} diff --git a/drivers/gpu/drm/ci/build.sh b/drivers/gpu/drm/ci/build.sh new file mode 100644 index 000000000000..7b014287a041 --- /dev/null +++ b/drivers/gpu/drm/ci/build.sh @@ -0,0 +1,157 @@ +#!/bin/bash +# SPDX-License-Identifier: MIT + +set -ex + +# Clean up stale rebases that GitLab might not have removed when reusing a checkout dir +rm -rf .git/rebase-apply + +. .gitlab-ci/container/container_pre_build.sh + +# libssl-dev was uninstalled because it was considered an ephemeral package +apt-get update +apt-get install -y libssl-dev + +if [[ "$KERNEL_ARCH" = "arm64" ]]; then + GCC_ARCH="aarch64-linux-gnu" + DEBIAN_ARCH="arm64" + DEVICE_TREES="arch/arm64/boot/dts/rockchip/rk3399-gru-kevin.dtb" + DEVICE_TREES+=" arch/arm64/boot/dts/amlogic/meson-gxl-s805x-libretech-ac.dtb" + DEVICE_TREES+=" arch/arm64/boot/dts/allwinner/sun50i-h6-pine-h64.dtb" + DEVICE_TREES+=" arch/arm64/boot/dts/amlogic/meson-gxm-khadas-vim2.dtb" + DEVICE_TREES+=" arch/arm64/boot/dts/qcom/apq8016-sbc.dtb" + DEVICE_TREES+=" arch/arm64/boot/dts/qcom/apq8096-db820c.dtb" + DEVICE_TREES+=" arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dtb" + DEVICE_TREES+=" arch/arm64/boot/dts/mediatek/mt8173-elm-hana.dtb" + DEVICE_TREES+=" arch/arm64/boot/dts/mediatek/mt8183-kukui-jacuzzi-juniper-sku16.dtb" + DEVICE_TREES+=" arch/arm64/boot/dts/mediatek/mt8192-asurada-spherion-r0.dtb" + DEVICE_TREES+=" arch/arm64/boot/dts/qcom/sc7180-trogdor-lazor-limozeen-nots-r5.dtb" +elif [[ "$KERNEL_ARCH" = "arm" ]]; then + GCC_ARCH="arm-linux-gnueabihf" + DEBIAN_ARCH="armhf" + DEVICE_TREES="arch/arm/boot/dts/rockchip/rk3288-veyron-jaq.dtb" + DEVICE_TREES+=" arch/arm/boot/dts/allwinner/sun8i-h3-libretech-all-h3-cc.dtb" + DEVICE_TREES+=" arch/arm/boot/dts/nxp/imx/imx6q-cubox-i.dtb" + apt-get install -y libssl-dev:armhf +else + GCC_ARCH="x86_64-linux-gnu" + DEBIAN_ARCH="x86_64" + DEVICE_TREES="" +fi + +export ARCH=${KERNEL_ARCH} +export CROSS_COMPILE="${GCC_ARCH}-" + +# The kernel doesn't like the gold linker (or the old lld in our debians). +# Sneak in some override symlinks during kernel build until we can update +# debian. +mkdir -p ld-links +for i in /usr/bin/*-ld /usr/bin/ld; do + i=$(basename $i) + ln -sf /usr/bin/$i.bfd ld-links/$i +done + +NEWPATH=$(pwd)/ld-links +export PATH=$NEWPATH:$PATH + +git config --global user.email "fdo@example.com" +git config --global user.name "freedesktop.org CI" +git config --global pull.rebase true + +# Try to merge fixes from target repo +if [ "$(git ls-remote --exit-code --heads ${UPSTREAM_REPO} ${TARGET_BRANCH}-external-fixes)" ]; then + git pull ${UPSTREAM_REPO} ${TARGET_BRANCH}-external-fixes +fi + +# Try to merge fixes from local repo if this isn't a merge request +if [ -z "$CI_MERGE_REQUEST_PROJECT_PATH" ]; then + if [ "$(git ls-remote --exit-code --heads origin ${TARGET_BRANCH}-external-fixes)" ]; then + git pull origin ${TARGET_BRANCH}-external-fixes + fi +fi + +for opt in $ENABLE_KCONFIGS; do + echo CONFIG_$opt=y >> drivers/gpu/drm/ci/${KERNEL_ARCH}.config +done +for opt in $DISABLE_KCONFIGS; do + echo CONFIG_$opt=n >> drivers/gpu/drm/ci/${KERNEL_ARCH}.config +done + +if [[ -n "${MERGE_FRAGMENT}" ]]; then + ./scripts/kconfig/merge_config.sh ${DEFCONFIG} drivers/gpu/drm/ci/${MERGE_FRAGMENT} +else + make `basename ${DEFCONFIG}` +fi + +make ${KERNEL_IMAGE_NAME} + +mkdir -p /lava-files/ +for image in ${KERNEL_IMAGE_NAME}; do + cp arch/${KERNEL_ARCH}/boot/${image} /lava-files/. +done + +if [[ -n ${DEVICE_TREES} ]]; then + make dtbs + cp ${DEVICE_TREES} /lava-files/. +fi + +make modules +mkdir -p install/modules/ +INSTALL_MOD_PATH=install/modules/ make modules_install + +if [[ ${DEBIAN_ARCH} = "arm64" ]]; then + make Image.lzma + mkimage \ + -f auto \ + -A arm \ + -O linux \ + -d arch/arm64/boot/Image.lzma \ + -C lzma\ + -b arch/arm64/boot/dts/qcom/sdm845-cheza-r3.dtb \ + /lava-files/cheza-kernel + KERNEL_IMAGE_NAME+=" cheza-kernel" + + # Make a gzipped copy of the Image for db410c. + gzip -k /lava-files/Image + KERNEL_IMAGE_NAME+=" Image.gz" +fi + +# Pass needed files to the test stage +mkdir -p install +cp -rfv .gitlab-ci/* install/. +cp -rfv install/common install/ci-common +cp -rfv drivers/gpu/drm/ci/* install/. + +. .gitlab-ci/container/container_post_build.sh + +if [[ "$UPLOAD_TO_MINIO" = "1" ]]; then + xz -7 -c -T${FDO_CI_CONCURRENT:-4} vmlinux > /lava-files/vmlinux.xz + FILES_TO_UPLOAD="$KERNEL_IMAGE_NAME vmlinux.xz" + + if [[ -n $DEVICE_TREES ]]; then + FILES_TO_UPLOAD="$FILES_TO_UPLOAD $(basename -a $DEVICE_TREES)" + fi + + for f in $FILES_TO_UPLOAD; do + ci-fairy s3cp --token-file "${CI_JOB_JWT_FILE}" /lava-files/$f \ + https://${PIPELINE_ARTIFACTS_BASE}/${DEBIAN_ARCH}/$f + done + + S3_ARTIFACT_NAME="kernel-files.tar.zst" + tar --zstd -cf $S3_ARTIFACT_NAME install + ci-fairy s3cp --token-file "${CI_JOB_JWT_FILE}" ${S3_ARTIFACT_NAME} https://${PIPELINE_ARTIFACTS_BASE}/${DEBIAN_ARCH}/${S3_ARTIFACT_NAME} + + echo "Download vmlinux.xz from https://${PIPELINE_ARTIFACTS_BASE}/${DEBIAN_ARCH}/vmlinux.xz" +fi + +mkdir -p artifacts/install/lib +mv install/* artifacts/install/. +rm -rf artifacts/install/modules +ln -s common artifacts/install/ci-common + +for image in ${KERNEL_IMAGE_NAME}; do + cp /lava-files/$image artifacts/install/. +done + +tar -C artifacts -cf artifacts/install.tar install +rm -rf artifacts/install diff --git a/drivers/gpu/drm/ci/build.yml b/drivers/gpu/drm/ci/build.yml new file mode 100644 index 000000000000..e6503f1c5927 --- /dev/null +++ b/drivers/gpu/drm/ci/build.yml @@ -0,0 +1,110 @@ +.build: + extends: + - .build-rules + stage: build + artifacts: + paths: + - artifacts + script: + - FDO_CI_CONCURRENT=${FDO_CI_CONCURRENT} bash drivers/gpu/drm/ci/build.sh + +.build:arm32: + extends: + - .build + - .use-debian/arm64_build + tags: + - aarch64 + variables: + DEFCONFIG: "arch/arm/configs/multi_v7_defconfig" + KERNEL_IMAGE_NAME: "zImage" + KERNEL_ARCH: "arm" + +.build:arm64: + extends: + - .build + - .use-debian/arm64_build + tags: + - aarch64 + variables: + DEFCONFIG: "arch/arm64/configs/defconfig" + KERNEL_IMAGE_NAME: "Image" + KERNEL_ARCH: "arm64" + +.build:x86_64: + extends: + - .build + - .use-debian/x86_64_build + variables: + DEFCONFIG: "arch/x86/configs/x86_64_defconfig" + KERNEL_IMAGE_NAME: "bzImage" + KERNEL_ARCH: "x86_64" + + +# Build IGT for testing on devices + +igt:arm32: + extends: .build:arm32 + script: + - FDO_CI_CONCURRENT=${FDO_CI_CONCURRENT} bash drivers/gpu/drm/ci/build-igt.sh + +igt:arm64: + extends: .build:arm64 + script: + - FDO_CI_CONCURRENT=${FDO_CI_CONCURRENT} bash drivers/gpu/drm/ci/build-igt.sh + +igt:x86_64: + extends: .build:x86_64 + script: + - FDO_CI_CONCURRENT=${FDO_CI_CONCURRENT} bash drivers/gpu/drm/ci/build-igt.sh + +# Build kernels for testing on devices + +testing:arm32: + extends: .build:arm32 + variables: + # Would be good to have DEBUG_KMEMLEAK, but it doesn't work well with any of + # PROVE_LOCKING and KASAN as of 5.17. + # + # db410c and db820c don't boot with KASAN_INLINE, probably due to the kernel + # becoming too big for their bootloaders. + ENABLE_KCONFIGS: "PROVE_LOCKING DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT" + UPLOAD_TO_MINIO: 1 + MERGE_FRAGMENT: arm.config + +testing:arm64: + extends: .build:arm64 + variables: + # Would be good to have DEBUG_KMEMLEAK, but it doesn't work well with any of + # PROVE_LOCKING and KASAN as of 5.17. + # + # db410c and db820c don't boot with KASAN_INLINE, probably due to the kernel + # becoming too big for their bootloaders. + ENABLE_KCONFIGS: "PROVE_LOCKING DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT" + UPLOAD_TO_MINIO: 1 + MERGE_FRAGMENT: arm64.config + +testing:x86_64: + extends: .build:x86_64 + variables: + # Would be good to have DEBUG_KMEMLEAK, but it doesn't work well with any of + # PROVE_LOCKING and KASAN as of 5.17. + # + # db410c and db820c don't boot with KASAN_INLINE, probably due to the kernel + # becoming too big for their bootloaders. + ENABLE_KCONFIGS: "PROVE_LOCKING DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT" + UPLOAD_TO_MINIO: 1 + MERGE_FRAGMENT: x86_64.config + + +# Jobs for build-testing different configurations + +build:arm32: + extends: .build:arm32 + +build-nodebugfs:arm64: + extends: .build:arm64 + variables: + DISABLE_KCONFIGS: "DEBUG_FS" + +build:x86_64: + extends: .build:x86_64 diff --git a/drivers/gpu/drm/ci/check-patch.py b/drivers/gpu/drm/ci/check-patch.py new file mode 100755 index 000000000000..a5f399a20e25 --- /dev/null +++ b/drivers/gpu/drm/ci/check-patch.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: GPL-2.0-or-later +# +# check-patch.py: run checkpatch.pl across all commits in a branch +# +# Based on qemu/.gitlab-ci.d/check-patch.py +# +# Copyright (C) 2020 Red Hat, Inc. +# Copyright (C) 2022 Collabora Ltd. + +import os +import os.path +import sys +import subprocess + +repourl = "https://gitlab.freedesktop.org/%s.git" % os.environ["CI_MERGE_REQUEST_PROJECT_PATH"] + +# GitLab CI environment does not give us any direct info about the +# base for the user's branch. We thus need to figure out a common +# ancestor between the user's branch and current git master. +os.environ["GIT_DEPTH"] = "1000" +subprocess.call(["git", "remote", "remove", "check-patch"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) +subprocess.check_call(["git", "remote", "add", "check-patch", repourl]) +subprocess.check_call(["git", "fetch", "check-patch", os.environ["CI_MERGE_REQUEST_TARGET_BRANCH_NAME"]], + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL) + +ancestor = subprocess.check_output(["git", "merge-base", + "check-patch/%s" % os.environ["CI_MERGE_REQUEST_TARGET_BRANCH_NAME"], "HEAD"], + universal_newlines=True) + +ancestor = ancestor.strip() + +log = subprocess.check_output(["git", "log", "--format=%H %s", + ancestor + "..."], + universal_newlines=True) + +subprocess.check_call(["git", "remote", "rm", "check-patch"]) + +if log == "": + print("\nNo commits since %s, skipping checks\n" % ancestor) + sys.exit(0) + +errors = False + +print("\nChecking all commits since %s...\n" % ancestor, flush=True) + +ret = subprocess.run(["scripts/checkpatch.pl", + "--terse", + "--types", os.environ["CHECKPATCH_TYPES"], + "--git", ancestor + "..."]) + +if ret.returncode != 0: + print(" ❌ FAIL one or more commits failed scripts/checkpatch.pl") + sys.exit(1) + +sys.exit(0) diff --git a/drivers/gpu/drm/ci/container.yml b/drivers/gpu/drm/ci/container.yml new file mode 100644 index 000000000000..9764e7921a4f --- /dev/null +++ b/drivers/gpu/drm/ci/container.yml @@ -0,0 +1,65 @@ +.container: + variables: + CI_REPOSITORY_URL: ${DRM_CI_PROJECT_URL}.git # So ci-templates clones drm-ci instead of the repo to test + CI_COMMIT_SHA: ${DRM_CI_COMMIT_SHA} + +debian/x86_64_build-base: + variables: + EXTRA_LOCAL_PACKAGES: "libcairo-dev libdw-dev libjson-c-dev libkmod2 libkmod-dev libpciaccess-dev libproc2-dev libudev-dev libunwind-dev python3-docutils bc python3-ply libssl-dev bc" + +debian/x86_64_test-gl: + variables: + EXTRA_LOCAL_PACKAGES: "jq libasound2 libcairo2 libdw1 libglib2.0-0 libjson-c5 libkmod-dev libkmod2 libgles2 libproc2-dev" + +debian/arm64_build: + variables: + EXTRA_LOCAL_PACKAGES: "libcairo-dev libdw-dev libjson-c-dev libproc2-dev libkmod2 libkmod-dev libpciaccess-dev libudev-dev libunwind-dev python3-docutils libssl-dev crossbuild-essential-armhf libkmod-dev:armhf libproc2-dev:armhf libunwind-dev:armhf libdw-dev:armhf libpixman-1-dev:armhf libcairo-dev:armhf libudev-dev:armhf libjson-c-dev:armhf" + +.kernel+rootfs: + variables: + EXTRA_LOCAL_PACKAGES: "jq libasound2 libcairo2 libdw1 libglib2.0-0 libjson-c5" + +# Disable container jobs that we won't use +alpine/x86_64_build: + rules: + - when: never + +debian/x86_64_test-vk: + rules: + - when: never + +fedora/x86_64_build: + rules: + - when: never + +debian/android_build: + rules: + - when: never + +debian/x86_64_test-android: + rules: + - when: never + +windows_build_vs2019: + rules: + - when: never + +windows_test_vs2019: + rules: + - when: never + +.debian/x86_64_build-mingw: + rules: + - when: never + +rustfmt: + rules: + - when: never + +windows_vs2019: + rules: + - when: never + +clang-format: + rules: + - when: never \ No newline at end of file diff --git a/drivers/gpu/drm/ci/gitlab-ci.yml b/drivers/gpu/drm/ci/gitlab-ci.yml new file mode 100644 index 000000000000..2c4df53f5dfe --- /dev/null +++ b/drivers/gpu/drm/ci/gitlab-ci.yml @@ -0,0 +1,251 @@ +variables: + DRM_CI_PROJECT_PATH: &drm-ci-project-path mesa/mesa + DRM_CI_COMMIT_SHA: &drm-ci-commit-sha 0dc961645c4f0241f8512cb0ec3ad59635842072 + + UPSTREAM_REPO: git://anongit.freedesktop.org/drm/drm + TARGET_BRANCH: drm-next + + IGT_VERSION: 471bfababd070e1dac0ebb87470ac4f2ae85e663 + + DEQP_RUNNER_GIT_URL: https://gitlab.freedesktop.org/anholt/deqp-runner.git + DEQP_RUNNER_GIT_TAG: v0.15.0 + + FDO_UPSTREAM_REPO: helen.fornazier/linux # The repo where the git-archive daily runs + MESA_TEMPLATES_COMMIT: &ci-templates-commit d5aa3941aa03c2f716595116354fb81eb8012acb + DRM_CI_PROJECT_URL: https://gitlab.freedesktop.org/${DRM_CI_PROJECT_PATH} + CI_PRE_CLONE_SCRIPT: |- + set -o xtrace + curl -L --retry 4 -f --retry-all-errors --retry-delay 60 -s ${DRM_CI_PROJECT_URL}/-/raw/${DRM_CI_COMMIT_SHA}/.gitlab-ci/download-git-cache.sh -o download-git-cache.sh + bash download-git-cache.sh + rm download-git-cache.sh + set +o xtrace + S3_HOST: s3.freedesktop.org + # per-pipeline artifact storage on MinIO + PIPELINE_ARTIFACTS_BASE: ${S3_HOST}/artifacts/${CI_PROJECT_PATH}/${CI_PIPELINE_ID} + # per-job artifact storage on MinIO + JOB_ARTIFACTS_BASE: ${PIPELINE_ARTIFACTS_BASE}/${CI_JOB_ID} + + LAVA_JOB_PRIORITY: 30 + +default: + before_script: + - export SCRIPTS_DIR=$(mktemp -d) + - curl -L -s --retry 4 -f --retry-all-errors --retry-delay 60 -O --output-dir "${SCRIPTS_DIR}" "${DRM_CI_PROJECT_URL}/-/raw/${DRM_CI_COMMIT_SHA}/.gitlab-ci/setup-test-env.sh" + - source ${SCRIPTS_DIR}/setup-test-env.sh + - echo -e "\e[0Ksection_start:$(date +%s):unset_env_vars_section[collapsed=true]\r\e[0KUnsetting vulnerable environment variables" + - export CI_JOB_JWT_FILE="${CI_JOB_JWT_FILE:-$(mktemp)}" + - echo -n "${CI_JOB_JWT}" > "${CI_JOB_JWT_FILE}" + - unset CI_JOB_JWT + - echo -e "\e[0Ksection_end:$(date +%s):unset_env_vars_section\r\e[0K" + + - echo -e "\e[0Ksection_start:$(date +%s):drm_ci_download_section[collapsed=true]\r\e[0KDownloading mesa from $DRM_CI_PROJECT_URL/-/archive/$DRM_CI_COMMIT_SHA/mesa-$DRM_CI_COMMIT_SHA.tar.gz" + - cd $CI_PROJECT_DIR + - curl --output - $DRM_CI_PROJECT_URL/-/archive/$DRM_CI_COMMIT_SHA/mesa-$DRM_CI_COMMIT_SHA.tar.gz | tar -xz + - mv mesa-$DRM_CI_COMMIT_SHA/.gitlab-ci* . + - rm -rf mesa-$DRM_CI_COMMIT_SHA/ + - echo -e "\e[0Ksection_end:$(date +%s):drm_ci_download_section\r\e[0K" + + after_script: + - > + set +x + + test -e "${CI_JOB_JWT_FILE}" && + export CI_JOB_JWT="$(<${CI_JOB_JWT_FILE})" && + rm "${CI_JOB_JWT_FILE}" + + # Retry when job fails. + retry: + max: 1 + # Ignore runner_unsupported, stale_schedule, archived_failure, or + # unmet_prerequisites + when: + - api_failure + - runner_system_failure + - script_failure + - job_execution_timeout + - scheduler_failure + - data_integrity_failure + - unknown_failure + +include: + - project: 'freedesktop/ci-templates' + ref: 16bc29078de5e0a067ff84a1a199a3760d3b3811 + file: + - '/templates/ci-fairy.yml' + - project: 'freedesktop/ci-templates' + ref: *ci-templates-commit + file: + - '/templates/alpine.yml' + - '/templates/debian.yml' + - '/templates/fedora.yml' + - project: *drm-ci-project-path + ref: *drm-ci-commit-sha + file: + - '/.gitlab-ci/farm-rules.yml' + - '/.gitlab-ci/test-source-dep.yml' + - '/.gitlab-ci/container/gitlab-ci.yml' + - '/.gitlab-ci/test/gitlab-ci.yml' + - '/.gitlab-ci/lava/lava-gitlab-ci.yml' + - drivers/gpu/drm/ci/image-tags.yml + - drivers/gpu/drm/ci/container.yml + - drivers/gpu/drm/ci/static-checks.yml + - drivers/gpu/drm/ci/build.yml + - drivers/gpu/drm/ci/test.yml + - 'https://gitlab.freedesktop.org/gfx-ci/lab-status/-/raw/main/lab-status.yml' + + +stages: + - sanity + - container + - git-archive + - build + - amdgpu + - i915 + - mediatek + - meson + - msm + - rockchip + - virtio-gpu + - lint + +# YAML anchors for rule conditions +# -------------------------------- +.rules-anchors: + rules: + # Pipeline for forked project branch + - if: &is-forked-branch '$CI_COMMIT_BRANCH && $CI_PROJECT_NAMESPACE != "mesa"' + when: manual + # Forked project branch / pre-merge pipeline not for Marge bot + - if: &is-forked-branch-or-pre-merge-not-for-marge '$CI_PROJECT_NAMESPACE != "mesa" || ($GITLAB_USER_LOGIN != "marge-bot" && $CI_PIPELINE_SOURCE == "merge_request_event")' + when: manual + # Pipeline runs for the main branch of the upstream Mesa project + - if: &is-mesa-main '$CI_PROJECT_NAMESPACE == "mesa" && $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH && $CI_COMMIT_BRANCH' + when: always + # Post-merge pipeline + - if: &is-post-merge '$CI_PROJECT_NAMESPACE == "mesa" && $CI_COMMIT_BRANCH' + when: on_success + # Post-merge pipeline, not for Marge Bot + - if: &is-post-merge-not-for-marge '$CI_PROJECT_NAMESPACE == "mesa" && $GITLAB_USER_LOGIN != "marge-bot" && $CI_COMMIT_BRANCH' + when: on_success + # Pre-merge pipeline + - if: &is-pre-merge '$CI_PIPELINE_SOURCE == "merge_request_event"' + when: on_success + # Pre-merge pipeline for Marge Bot + - if: &is-pre-merge-for-marge '$GITLAB_USER_LOGIN == "marge-bot" && $CI_PIPELINE_SOURCE == "merge_request_event"' + when: on_success + +# Rule to filter for only scheduled pipelines. +.scheduled_pipeline-rules: + rules: + - if: &is-scheduled-pipeline '$CI_PIPELINE_SOURCE == "schedule"' + when: on_success + +# Generic rule to not run the job during scheduled pipelines. Jobs that aren't +# something like a nightly run should include this rule. +.no_scheduled_pipelines-rules: + rules: + - if: *is-scheduled-pipeline + when: never + +# When to automatically run the CI for build jobs +.build-rules: + rules: + - !reference [.no_scheduled_pipelines-rules, rules] + # Run automatically once all dependency jobs have passed + - when: on_success + + +.ci-deqp-artifacts: + artifacts: + name: "mesa_${CI_JOB_NAME}" + when: always + untracked: false + paths: + # Watch out! Artifacts are relative to the build dir. + # https://gitlab.com/gitlab-org/gitlab-ce/commit/8788fb925706cad594adf6917a6c5f6587dd1521 + - artifacts + - _build/meson-logs/*.txt + - _build/meson-logs/strace + + +.container-rules: + rules: + - !reference [.no_scheduled_pipelines-rules, rules] + # Run pipeline by default in the main project if any CI pipeline + # configuration files were changed, to ensure docker images are up to date + - if: *is-post-merge + changes: + - drivers/gpu/drm/ci/**/* + when: on_success + # Run pipeline by default if it was triggered by Marge Bot, is for a + # merge request, and any files affecting the pipeline were changed + - if: *is-pre-merge-for-marge + when: on_success + # Run pipeline by default in the main project if it was not triggered by + # Marge Bot, and any files affecting the pipeline were changed + - if: *is-post-merge-not-for-marge + when: on_success + # Allow triggering jobs manually in other cases + - when: manual + + + +# Git archive + +make git archive: + extends: + - .fdo.ci-fairy + stage: git-archive + rules: + - !reference [.scheduled_pipeline-rules, rules] + # ensure we are running on packet + tags: + - packet.net + script: + # Remove drm-ci files we just added + - rm -rf .gitlab-ci.* + + # Compactify the .git directory + - git gc --aggressive + # compress the current folder + - tar -cvzf ../$CI_PROJECT_NAME.tar.gz . + + # login with the JWT token file + - ci-fairy s3cp --token-file "${CI_JOB_JWT_FILE}" ../$CI_PROJECT_NAME.tar.gz https://$S3_HOST/git-cache/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/$CI_PROJECT_NAME.tar.gz + + +# Sanity checks of MR settings and commit logs +sanity: + extends: + - .fdo.ci-fairy + stage: sanity + rules: + - if: *is-pre-merge + when: on_success + # Other cases default to never + variables: + GIT_STRATEGY: none + script: + # ci-fairy check-commits --junit-xml=check-commits.xml + - ci-fairy check-merge-request --require-allow-collaboration --junit-xml=check-merge-request.xml + artifacts: + when: on_failure + reports: + junit: check-*.xml + +# Rules for tests that should not block merging, but should be available to +# optionally run with the "play" button in the UI in pre-merge non-marge +# pipelines. This should appear in "extends:" after any includes of +# test-source-dep.yml rules, so that these rules replace those. +.test-manual-mr: + rules: + - !reference [.no_scheduled_pipelines-rules, rules] + - if: *is-forked-branch-or-pre-merge-not-for-marge + when: manual + variables: + JOB_TIMEOUT: 80 + + +# Jobs that need to pass before spending hardware resources on further testing +.required-for-hardware-jobs: + needs: [] \ No newline at end of file diff --git a/drivers/gpu/drm/ci/igt_runner.sh b/drivers/gpu/drm/ci/igt_runner.sh new file mode 100755 index 000000000000..2bb759165063 --- /dev/null +++ b/drivers/gpu/drm/ci/igt_runner.sh @@ -0,0 +1,77 @@ +#!/bin/sh +# SPDX-License-Identifier: MIT + +set -ex + +export IGT_FORCE_DRIVER=${DRIVER_NAME} +export PATH=$PATH:/igt/bin/ +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/igt/lib/aarch64-linux-gnu/:/igt/lib/x86_64-linux-gnu:/igt/lib:/igt/lib64 + +# Uncomment the below to debug problems with driver probing +: ' +ls -l /dev/dri/ +cat /sys/kernel/debug/devices_deferred +cat /sys/kernel/debug/device_component/* +' + +# Dump drm state to confirm that kernel was able to find a connected display: +# TODO this path might not exist for all drivers.. maybe run modetest instead? +set +e +cat /sys/kernel/debug/dri/*/state +set -e + +# Cannot use HWCI_KERNEL_MODULES as at that point we don't have the module in /lib +if [ "$IGT_FORCE_DRIVER" = "amdgpu" ]; then + mv /install/modules/lib/modules/* /lib/modules/. + modprobe amdgpu +fi + +if [ -e "/install/xfails/$DRIVER_NAME-$GPU_VERSION-skips.txt" ]; then + IGT_SKIPS="--skips /install/xfails/$DRIVER_NAME-$GPU_VERSION-skips.txt" +fi + +if [ -e "/install/xfails/$DRIVER_NAME-$GPU_VERSION-flakes.txt" ]; then + IGT_FLAKES="--flakes /install/xfails/$DRIVER_NAME-$GPU_VERSION-flakes.txt" +fi + +if [ -e "/install/xfails/$DRIVER_NAME-$GPU_VERSION-fails.txt" ]; then + IGT_FAILS="--baseline /install/xfails/$DRIVER_NAME-$GPU_VERSION-fails.txt" +fi + +if [ "`uname -m`" = "aarch64" ]; then + ARCH="arm64" +elif [ "`uname -m`" = "armv7l" ]; then + ARCH="arm" +else + ARCH="x86_64" +fi + +curl -L --retry 4 -f --retry-all-errors --retry-delay 60 -s ${FDO_HTTP_CACHE_URI:-}$PIPELINE_ARTIFACTS_BASE/$ARCH/igt.tar.gz | tar --zstd -v -x -C / + +set +e +igt-runner \ + run \ + --igt-folder /igt/libexec/igt-gpu-tools \ + --caselist /install/testlist.txt \ + --output /results \ + $IGT_SKIPS \ + $IGT_FLAKES \ + $IGT_FAILS \ + --fraction-start $CI_NODE_INDEX \ + --fraction $CI_NODE_TOTAL \ + --jobs 1 +ret=$? +set -e + +deqp-runner junit \ + --testsuite IGT \ + --results /results/failures.csv \ + --output /results/junit.xml \ + --limit 50 \ + --template "See https://$CI_PROJECT_ROOT_NAMESPACE.pages.freedesktop.org/-/$CI_PROJECT_NAME/-/jobs/$CI_JOB_ID/artifacts/results/{{testcase}}.xml" + +# Store the results also in the simpler format used by the runner in ChromeOS CI +#sed -r 's/(dmesg-warn|pass)/success/g' /results/results.txt > /results/results_simple.txt + +cd $oldpath +exit $ret diff --git a/drivers/gpu/drm/ci/image-tags.yml b/drivers/gpu/drm/ci/image-tags.yml new file mode 100644 index 000000000000..f051b6c547c5 --- /dev/null +++ b/drivers/gpu/drm/ci/image-tags.yml @@ -0,0 +1,15 @@ +variables: + CONTAINER_TAG: "2023-08-10-mesa-uprev" + DEBIAN_X86_64_BUILD_BASE_IMAGE: "debian/x86_64_build-base" + DEBIAN_BASE_TAG: "${CONTAINER_TAG}" + + DEBIAN_X86_64_BUILD_IMAGE_PATH: "debian/x86_64_build" + DEBIAN_BUILD_TAG: "${CONTAINER_TAG}" + + KERNEL_ROOTFS_TAG: "${CONTAINER_TAG}" + + DEBIAN_X86_64_TEST_BASE_IMAGE: "debian/x86_64_test-base" + DEBIAN_X86_64_TEST_IMAGE_GL_PATH: "debian/x86_64_test-gl" + DEBIAN_X86_64_TEST_GL_TAG: "${CONTAINER_TAG}" + + ALPINE_X86_64_LAVA_SSH_TAG: "${CONTAINER_TAG}" \ No newline at end of file diff --git a/drivers/gpu/drm/ci/lava-submit.sh b/drivers/gpu/drm/ci/lava-submit.sh new file mode 100755 index 000000000000..0c4456b21b0f --- /dev/null +++ b/drivers/gpu/drm/ci/lava-submit.sh @@ -0,0 +1,57 @@ +#!/bin/bash +# SPDX-License-Identifier: MIT + +set -e +set -x + +# Try to use the kernel and rootfs built in mainline first, so we're more +# likely to hit cache +if curl -L --retry 4 -f --retry-all-errors --retry-delay 60 -s "https://${BASE_SYSTEM_MAINLINE_HOST_PATH}/done"; then + BASE_SYSTEM_HOST_PATH="${BASE_SYSTEM_MAINLINE_HOST_PATH}" +else + BASE_SYSTEM_HOST_PATH="${BASE_SYSTEM_FORK_HOST_PATH}" +fi + +rm -rf results +mkdir -p results/job-rootfs-overlay/ + +cp artifacts/ci-common/capture-devcoredump.sh results/job-rootfs-overlay/ +cp artifacts/ci-common/init-*.sh results/job-rootfs-overlay/ +cp artifacts/ci-common/intel-gpu-freq.sh results/job-rootfs-overlay/ +cp "$SCRIPTS_DIR"/setup-test-env.sh results/job-rootfs-overlay/ + +# Prepare env vars for upload. +section_start variables "Variables passed through:" +KERNEL_IMAGE_BASE_URL="https://${BASE_SYSTEM_HOST_PATH}" \ + artifacts/ci-common/generate-env.sh | tee results/job-rootfs-overlay/set-job-env-vars.sh +section_end variables + +tar zcf job-rootfs-overlay.tar.gz -C results/job-rootfs-overlay/ . +ci-fairy s3cp --token-file "${CI_JOB_JWT_FILE}" job-rootfs-overlay.tar.gz "https://${JOB_ROOTFS_OVERLAY_PATH}" + +touch results/lava.log +tail -f results/lava.log & + +PYTHONPATH=artifacts/ artifacts/lava/lava_job_submitter.py \ + submit \ + --dump-yaml \ + --pipeline-info "$CI_JOB_NAME: $CI_PIPELINE_URL on $CI_COMMIT_REF_NAME ${CI_NODE_INDEX}/${CI_NODE_TOTAL}" \ + --rootfs-url-prefix "https://${BASE_SYSTEM_HOST_PATH}" \ + --kernel-url-prefix "https://${PIPELINE_ARTIFACTS_BASE}/${ARCH}" \ + --build-url "${FDO_HTTP_CACHE_URI:-}https://${PIPELINE_ARTIFACTS_BASE}/${ARCH}/kernel-files.tar.zst" \ + --job-rootfs-overlay-url "${FDO_HTTP_CACHE_URI:-}https://${JOB_ROOTFS_OVERLAY_PATH}" \ + --job-timeout-min ${JOB_TIMEOUT:-80} \ + --first-stage-init artifacts/ci-common/init-stage1.sh \ + --ci-project-dir "${CI_PROJECT_DIR}" \ + --device-type "${DEVICE_TYPE}" \ + --dtb-filename "${DTB}" \ + --jwt-file "${CI_JOB_JWT_FILE}" \ + --kernel-image-name "${KERNEL_IMAGE_NAME}" \ + --kernel-image-type "${KERNEL_IMAGE_TYPE}" \ + --boot-method "${BOOT_METHOD}" \ + --visibility-group "${VISIBILITY_GROUP}" \ + --lava-tags "${LAVA_TAGS}" \ + --mesa-job-name "$CI_JOB_NAME" \ + --structured-log-file "results/lava_job_detail.json" \ + --ssh-client-image "${LAVA_SSH_CLIENT_IMAGE}" \ + >> results/lava.log diff --git a/drivers/gpu/drm/ci/static-checks.yml b/drivers/gpu/drm/ci/static-checks.yml new file mode 100644 index 000000000000..13ffa827b7fa --- /dev/null +++ b/drivers/gpu/drm/ci/static-checks.yml @@ -0,0 +1,12 @@ +check-patch: + extends: + - .build + - .use-debian/x86_64_build + script: + - drivers/gpu/drm/ci/check-patch.py + variables: + CHECKPATCH_TYPES: "BAD_SIGN_OFF,BAD_STABLE_ADDRESS_STYLE,COMMIT_COMMENT_SYMBOL,COMMIT_MESSAGE,EMAIL_SUBJECT,FROM_SIGN_OFF_MISMATCH,MISSING_SIGN_OFF,NO_AUTHOR_SIGN_OFF,DIFF_IN_COMMIT_MSG,GERRIT_CHANGE_ID,GIT_COMMIT_ID,UNKNOWN_COMMIT_ID,CODE_INDENT,BIT_MACRO,DOS_LINE_ENDINGS" + rules: + - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' + when: on_success + # Other cases default to never diff --git a/drivers/gpu/drm/ci/test.yml b/drivers/gpu/drm/ci/test.yml new file mode 100644 index 000000000000..6473cddaa7a9 --- /dev/null +++ b/drivers/gpu/drm/ci/test.yml @@ -0,0 +1,335 @@ +.test-rules: + rules: + - if: '$FD_FARM == "offline" && $RUNNER_TAG =~ /^google-freedreno-/' + when: never + - if: '$COLLABORA_FARM == "offline" && $RUNNER_TAG =~ /^mesa-ci-x86-64-lava-/' + when: never + - !reference [.no_scheduled_pipelines-rules, rules] + - when: on_success + +.lava-test: + extends: + - .test-rules + script: + # Note: Build dir (and thus install) may be dirty due to GIT_STRATEGY + - rm -rf install + - tar -xf artifacts/install.tar + - mv install/* artifacts/. + # Override it with our lava-submit.sh script + - ./artifacts/lava-submit.sh + +.lava-igt:arm32: + extends: + - .lava-test:arm32 + variables: + HWCI_TEST_SCRIPT: "/install/igt_runner.sh" + ARCH: "armhf" + dependencies: + - testing:arm32 + needs: + - alpine/x86_64_lava_ssh_client + - kernel+rootfs_arm32 + - debian/x86_64_build + - testing:arm32 + - igt:arm32 + +.lava-igt:arm64: + extends: + - .lava-test:arm64 + variables: + HWCI_TEST_SCRIPT: "/install/igt_runner.sh" + ARCH: "arm64" + dependencies: + - testing:arm64 + needs: + - alpine/x86_64_lava_ssh_client + - kernel+rootfs_arm64 + - debian/x86_64_build + - testing:arm64 + - igt:arm64 + +.lava-igt:x86_64: + extends: + - .lava-test:x86_64 + variables: + HWCI_TEST_SCRIPT: "/install/igt_runner.sh" + ARCH: "x86_64" + dependencies: + - testing:x86_64 + needs: + - alpine/x86_64_lava_ssh_client + - kernel+rootfs_x86_64 + - debian/x86_64_build + - testing:x86_64 + - igt:x86_64 + +.baremetal-igt-arm64: + extends: + - .baremetal-test-arm64 + - .use-debian/arm64_test + - .test-rules + variables: + FDO_CI_CONCURRENT: 10 + HWCI_TEST_SCRIPT: "/install/igt_runner.sh" + S3_ARTIFACT_NAME: "arm64/kernel-files" + BM_KERNEL: https://${PIPELINE_ARTIFACTS_BASE}/arm64/Image.gz + BM_CMDLINE: "ip=dhcp console=ttyMSM0,115200n8 $BM_KERNEL_EXTRA_ARGS root=/dev/nfs rw nfsrootdebug nfsroot=,tcp,nfsvers=4.2 init=/init $BM_KERNELARGS" + needs: + - debian/arm64_test + - job: testing:arm64 + artifacts: false + - igt:arm64 + tags: + - $RUNNER_TAG + +msm:sc7180: + extends: + - .lava-igt:arm64 + stage: msm + parallel: 2 + variables: + DRIVER_NAME: msm + DEVICE_TYPE: sc7180-trogdor-lazor-limozeen + DTB: sc7180-trogdor-lazor-limozeen-nots-r5 + BOOT_METHOD: depthcharge + KERNEL_IMAGE_TYPE: "" + GPU_VERSION: sc7180 + RUNNER_TAG: mesa-ci-x86-64-lava-sc7180-trogdor-lazor-limozeen + +msm:apq8016: + extends: + - .baremetal-igt-arm64 + stage: msm + variables: + DRIVER_NAME: msm + BM_DTB: https://${PIPELINE_ARTIFACTS_BASE}/arm64/apq8016-sbc.dtb + GPU_VERSION: apq8016 + BM_CMDLINE: "ip=dhcp console=ttyMSM0,115200n8 $BM_KERNEL_EXTRA_ARGS root=/dev/nfs rw nfsrootdebug nfsroot=,tcp,nfsvers=4.2 init=/init $BM_KERNELARGS" + RUNNER_TAG: google-freedreno-db410c + script: + - ./install/bare-metal/fastboot.sh + rules: + # TODO: current issue: it is not fiding the NFS root. Fix and remove this rule. + - when: never + +msm:apq8096: + extends: + - .baremetal-igt-arm64 + stage: msm + variables: + DRIVER_NAME: msm + BM_KERNEL_EXTRA_ARGS: maxcpus=2 + BM_DTB: https://${PIPELINE_ARTIFACTS_BASE}/arm64/apq8096-db820c.dtb + GPU_VERSION: apq8096 + RUNNER_TAG: google-freedreno-db820c + script: + - ./install/bare-metal/fastboot.sh + +msm:sdm845: + extends: + - .baremetal-igt-arm64 + stage: msm + parallel: 6 + variables: + DRIVER_NAME: msm + BM_KERNEL: https://${PIPELINE_ARTIFACTS_BASE}/arm64/cheza-kernel + GPU_VERSION: sdm845 + RUNNER_TAG: google-freedreno-cheza + script: + - ./install/bare-metal/cros-servo.sh + +rockchip:rk3288: + extends: + - .lava-igt:arm32 + stage: rockchip + variables: + DRIVER_NAME: rockchip + DEVICE_TYPE: rk3288-veyron-jaq + DTB: ${DEVICE_TYPE} + BOOT_METHOD: depthcharge + KERNEL_IMAGE_TYPE: "zimage" + GPU_VERSION: rk3288 + RUNNER_TAG: mesa-ci-x86-64-lava-rk3288-veyron-jaq + +rockchip:rk3399: + extends: + - .lava-igt:arm64 + stage: rockchip + parallel: 3 + variables: + DRIVER_NAME: rockchip + DEVICE_TYPE: rk3399-gru-kevin + DTB: ${DEVICE_TYPE} + BOOT_METHOD: depthcharge + KERNEL_IMAGE_TYPE: "" + GPU_VERSION: rk3399 + RUNNER_TAG: mesa-ci-x86-64-lava-rk3399-gru-kevin + +.i915: + extends: + - .lava-igt:x86_64 + stage: i915 + variables: + DRIVER_NAME: i915 + DTB: "" + BOOT_METHOD: depthcharge + KERNEL_IMAGE_TYPE: "" + +i915:apl: + extends: + - .i915 + parallel: 12 + variables: + DEVICE_TYPE: asus-C523NA-A20057-coral + GPU_VERSION: apl + RUNNER_TAG: mesa-ci-x86-64-lava-asus-C523NA-A20057-coral + +i915:glk: + extends: + - .i915 + parallel: 5 + variables: + DEVICE_TYPE: hp-x360-12b-ca0010nr-n4020-octopus + GPU_VERSION: glk + RUNNER_TAG: mesa-ci-x86-64-lava-hp-x360-12b-ca0010nr-n4020-octopus + +i915:amly: + extends: + - .i915 + parallel: 8 + variables: + DEVICE_TYPE: asus-C433TA-AJ0005-rammus + GPU_VERSION: amly + RUNNER_TAG: mesa-ci-x86-64-lava-asus-C433TA-AJ0005-rammus + +i915:kbl: + extends: + - .i915 + parallel: 5 + variables: + DEVICE_TYPE: hp-x360-14-G1-sona + GPU_VERSION: kbl + RUNNER_TAG: mesa-ci-x86-64-lava-hp-x360-14-G1-sona + +i915:whl: + extends: + - .i915 + parallel: 8 + variables: + DEVICE_TYPE: dell-latitude-5400-8665U-sarien + GPU_VERSION: whl + RUNNER_TAG: mesa-ci-x86-64-lava-dell-latitude-5400-8665U-sarien + +i915:cml: + extends: + - .i915 + parallel: 6 + variables: + DEVICE_TYPE: asus-C436FA-Flip-hatch + GPU_VERSION: cml + RUNNER_TAG: mesa-ci-x86-64-lava-asus-C436FA-flip-hatch + +i915:tgl: + extends: + - .i915 + parallel: 6 + variables: + DEVICE_TYPE: asus-cx9400-volteer + GPU_VERSION: tgl + RUNNER_TAG: mesa-ci-x86-64-lava-asus-cx9400-volteer + +.amdgpu: + extends: + - .lava-igt:x86_64 + stage: amdgpu + variables: + DRIVER_NAME: amdgpu + DTB: "" + BOOT_METHOD: depthcharge + KERNEL_IMAGE_TYPE: "" + +amdgpu:stoney: + extends: + - .amdgpu + variables: + DEVICE_TYPE: hp-11A-G6-EE-grunt + GPU_VERSION: stoney + RUNNER_TAG: mesa-ci-x86-64-lava-hp-11A-G6-EE-grunt + +.mediatek: + extends: + - .lava-igt:arm64 + stage: mediatek + variables: + DRIVER_NAME: mediatek + DTB: ${DEVICE_TYPE} + BOOT_METHOD: depthcharge + KERNEL_IMAGE_TYPE: "" + +mediatek:mt8173: + extends: + - .mediatek + variables: + DEVICE_TYPE: mt8173-elm-hana + GPU_VERSION: mt8173 + RUNNER_TAG: mesa-ci-x86-64-lava-mt8173-elm-hana + rules: + # TODO: current issue: device is hanging. Fix and remove this rule. + - when: never + +mediatek:mt8183: + extends: + - .mediatek + variables: + DEVICE_TYPE: mt8183-kukui-jacuzzi-juniper-sku16 + GPU_VERSION: mt8183 + RUNNER_TAG: mesa-ci-x86-64-lava-mt8183-kukui-jacuzzi-juniper-sku16 + +# drm-mtk doesn't even probe yet in mainline for mt8192 +.mediatek:mt8192: + extends: + - .mediatek + variables: + DEVICE_TYPE: mt8192-asurada-spherion-r0 + GPU_VERSION: mt8192 + RUNNER_TAG: mesa-ci-x86-64-lava-mt8192-asurada-spherion-r0 + +.meson: + extends: + - .lava-igt:arm64 + stage: meson + variables: + DRIVER_NAME: meson + DTB: ${DEVICE_TYPE} + BOOT_METHOD: u-boot + KERNEL_IMAGE_TYPE: "image" + +meson:g12b: + extends: + - .meson + variables: + DEVICE_TYPE: meson-g12b-a311d-khadas-vim3 + GPU_VERSION: g12b + RUNNER_TAG: mesa-ci-x86-64-lava-meson-g12b-a311d-khadas-vim3 + +virtio_gpu:none: + stage: virtio-gpu + variables: + CROSVM_GALLIUM_DRIVER: llvmpipe + DRIVER_NAME: virtio_gpu + GPU_VERSION: none + extends: + - .test-gl + tags: + - kvm + script: + - ln -sf $CI_PROJECT_DIR/install /install + - mv install/bzImage /lava-files/bzImage + - install/crosvm-runner.sh install/igt_runner.sh + needs: + - debian/x86_64_test-gl + - testing:x86_64 + - igt:x86_64 + rules: + # TODO: current issue: malloc(): corrupted top size. Fix and remove this rule. + - when: never \ No newline at end of file diff --git a/drivers/gpu/drm/ci/testlist.txt b/drivers/gpu/drm/ci/testlist.txt new file mode 100644 index 000000000000..f82cd90372f4 --- /dev/null +++ b/drivers/gpu/drm/ci/testlist.txt @@ -0,0 +1,2912 @@ +core_auth@getclient-simple +core_auth@getclient-master-drop +core_auth@basic-auth +core_auth@many-magics +core_getclient +core_getstats +core_getversion +core_setmaster_vs_auth +drm_read@invalid-buffer +drm_read@fault-buffer +drm_read@empty-block +drm_read@empty-nonblock +drm_read@short-buffer-block +drm_read@short-buffer-nonblock +drm_read@short-buffer-wakeup +gem_eio@throttle +gem_eio@create +gem_eio@create-ext +gem_eio@context-create +gem_eio@execbuf +gem_eio@banned +gem_eio@suspend +gem_eio@hibernate +gem_eio@in-flight-external +gem_eio@in-flight-suspend +gem_eio@reset-stress +gem_eio@unwedge-stress +gem_eio@wait-immediate +gem_eio@wait-wedge-immediate +gem_eio@in-flight-immediate +gem_eio@in-flight-contexts-immediate +gem_eio@in-flight-internal-immediate +gem_eio@wait-1us +gem_eio@wait-wedge-1us +gem_eio@in-flight-1us +gem_eio@in-flight-contexts-1us +gem_eio@in-flight-internal-1us +gem_eio@wait-10ms +gem_eio@wait-wedge-10ms +gem_eio@in-flight-10ms +gem_eio@in-flight-contexts-10ms +gem_eio@in-flight-internal-10ms +gem_eio@kms +kms_3d +kms_addfb_basic@unused-handle +kms_addfb_basic@unused-pitches +kms_addfb_basic@unused-offsets +kms_addfb_basic@unused-modifier +kms_addfb_basic@clobberred-modifier +kms_addfb_basic@invalid-smem-bo-on-discrete +kms_addfb_basic@legacy-format +kms_addfb_basic@no-handle +kms_addfb_basic@basic +kms_addfb_basic@bad-pitch-0 +kms_addfb_basic@bad-pitch-32 +kms_addfb_basic@bad-pitch-63 +kms_addfb_basic@bad-pitch-128 +kms_addfb_basic@bad-pitch-256 +kms_addfb_basic@bad-pitch-1024 +kms_addfb_basic@bad-pitch-999 +kms_addfb_basic@bad-pitch-65536 +kms_addfb_basic@invalid-get-prop-any +kms_addfb_basic@invalid-get-prop +kms_addfb_basic@invalid-set-prop-any +kms_addfb_basic@invalid-set-prop +kms_addfb_basic@master-rmfb +kms_addfb_basic@addfb25-modifier-no-flag +kms_addfb_basic@addfb25-bad-modifier +kms_addfb_basic@addfb25-x-tiled-mismatch-legacy +kms_addfb_basic@addfb25-x-tiled-legacy +kms_addfb_basic@addfb25-framebuffer-vs-set-tiling +kms_addfb_basic@basic-x-tiled-legacy +kms_addfb_basic@framebuffer-vs-set-tiling +kms_addfb_basic@tile-pitch-mismatch +kms_addfb_basic@basic-y-tiled-legacy +kms_addfb_basic@size-max +kms_addfb_basic@too-wide +kms_addfb_basic@too-high +kms_addfb_basic@bo-too-small +kms_addfb_basic@small-bo +kms_addfb_basic@bo-too-small-due-to-tiling +kms_addfb_basic@addfb25-y-tiled-legacy +kms_addfb_basic@addfb25-yf-tiled-legacy +kms_addfb_basic@addfb25-y-tiled-small-legacy +kms_addfb_basic@addfb25-4-tiled +kms_async_flips@async-flip-with-page-flip-events +kms_async_flips@alternate-sync-async-flip +kms_async_flips@test-time-stamp +kms_async_flips@test-cursor +kms_async_flips@invalid-async-flip +kms_async_flips@crc +kms_atomic@plane-overlay-legacy +kms_atomic@plane-primary-legacy +kms_atomic@plane-primary-overlay-mutable-zpos +kms_atomic@plane-immutable-zpos +kms_atomic@test-only +kms_atomic@plane-cursor-legacy +kms_atomic@plane-invalid-params +kms_atomic@plane-invalid-params-fence +kms_atomic@crtc-invalid-params +kms_atomic@crtc-invalid-params-fence +kms_atomic@atomic-invalid-params +kms_atomic@atomic_plane_damage +kms_atomic_interruptible@legacy-setmode +kms_atomic_interruptible@atomic-setmode +kms_atomic_interruptible@legacy-dpms +kms_atomic_interruptible@legacy-pageflip +kms_atomic_interruptible@legacy-cursor +kms_atomic_interruptible@universal-setplane-primary +kms_atomic_interruptible@universal-setplane-cursor +kms_atomic_transition@plane-primary-toggle-with-vblank-wait +kms_atomic_transition@plane-all-transition +kms_atomic_transition@plane-all-transition-fencing +kms_atomic_transition@plane-all-transition-nonblocking +kms_atomic_transition@plane-all-transition-nonblocking-fencing +kms_atomic_transition@plane-use-after-nonblocking-unbind +kms_atomic_transition@plane-use-after-nonblocking-unbind-fencing +kms_atomic_transition@plane-all-modeset-transition +kms_atomic_transition@plane-all-modeset-transition-fencing +kms_atomic_transition@plane-all-modeset-transition-internal-panels +kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels +kms_atomic_transition@plane-toggle-modeset-transition +kms_atomic_transition@modeset-transition +kms_atomic_transition@modeset-transition-fencing +kms_atomic_transition@modeset-transition-nonblocking +kms_atomic_transition@modeset-transition-nonblocking-fencing +kms_big_fb@x-tiled-addfb-size-overflow +kms_big_fb@y-tiled-addfb-size-overflow +kms_big_fb@yf-tiled-addfb-size-overflow +kms_big_fb@4-tiled-addfb-size-overflow +kms_big_fb@x-tiled-addfb-size-offset-overflow +kms_big_fb@y-tiled-addfb-size-offset-overflow +kms_big_fb@yf-tiled-addfb-size-offset-overflow +kms_big_fb@4-tiled-addfb-size-offset-overflow +kms_big_fb@linear-addfb +kms_big_fb@x-tiled-addfb +kms_big_fb@y-tiled-addfb +kms_big_fb@yf-tiled-addfb +kms_big_fb@4-tiled-addfb +kms_big_fb@linear-8bpp-rotate-0 +kms_big_fb@linear-8bpp-rotate-90 +kms_big_fb@linear-8bpp-rotate-180 +kms_big_fb@linear-8bpp-rotate-270 +kms_big_fb@linear-16bpp-rotate-0 +kms_big_fb@linear-16bpp-rotate-90 +kms_big_fb@linear-16bpp-rotate-180 +kms_big_fb@linear-16bpp-rotate-270 +kms_big_fb@linear-32bpp-rotate-0 +kms_big_fb@linear-32bpp-rotate-90 +kms_big_fb@linear-32bpp-rotate-180 +kms_big_fb@linear-32bpp-rotate-270 +kms_big_fb@linear-64bpp-rotate-0 +kms_big_fb@linear-64bpp-rotate-90 +kms_big_fb@linear-64bpp-rotate-180 +kms_big_fb@linear-64bpp-rotate-270 +kms_big_fb@x-tiled-8bpp-rotate-0 +kms_big_fb@x-tiled-8bpp-rotate-90 +kms_big_fb@x-tiled-8bpp-rotate-180 +kms_big_fb@x-tiled-8bpp-rotate-270 +kms_big_fb@x-tiled-16bpp-rotate-0 +kms_big_fb@x-tiled-16bpp-rotate-90 +kms_big_fb@x-tiled-16bpp-rotate-180 +kms_big_fb@x-tiled-16bpp-rotate-270 +kms_big_fb@x-tiled-32bpp-rotate-0 +kms_big_fb@x-tiled-32bpp-rotate-90 +kms_big_fb@x-tiled-32bpp-rotate-180 +kms_big_fb@x-tiled-32bpp-rotate-270 +kms_big_fb@x-tiled-64bpp-rotate-0 +kms_big_fb@x-tiled-64bpp-rotate-90 +kms_big_fb@x-tiled-64bpp-rotate-180 +kms_big_fb@x-tiled-64bpp-rotate-270 +kms_big_fb@y-tiled-8bpp-rotate-0 +kms_big_fb@y-tiled-8bpp-rotate-90 +kms_big_fb@y-tiled-8bpp-rotate-180 +kms_big_fb@y-tiled-8bpp-rotate-270 +kms_big_fb@y-tiled-16bpp-rotate-0 +kms_big_fb@y-tiled-16bpp-rotate-90 +kms_big_fb@y-tiled-16bpp-rotate-180 +kms_big_fb@y-tiled-16bpp-rotate-270 +kms_big_fb@y-tiled-32bpp-rotate-0 +kms_big_fb@y-tiled-32bpp-rotate-90 +kms_big_fb@y-tiled-32bpp-rotate-180 +kms_big_fb@y-tiled-32bpp-rotate-270 +kms_big_fb@y-tiled-64bpp-rotate-0 +kms_big_fb@y-tiled-64bpp-rotate-90 +kms_big_fb@y-tiled-64bpp-rotate-180 +kms_big_fb@y-tiled-64bpp-rotate-270 +kms_big_fb@yf-tiled-8bpp-rotate-0 +kms_big_fb@yf-tiled-8bpp-rotate-90 +kms_big_fb@yf-tiled-8bpp-rotate-180 +kms_big_fb@yf-tiled-8bpp-rotate-270 +kms_big_fb@yf-tiled-16bpp-rotate-0 +kms_big_fb@yf-tiled-16bpp-rotate-90 +kms_big_fb@yf-tiled-16bpp-rotate-180 +kms_big_fb@yf-tiled-16bpp-rotate-270 +kms_big_fb@yf-tiled-32bpp-rotate-0 +kms_big_fb@yf-tiled-32bpp-rotate-90 +kms_big_fb@yf-tiled-32bpp-rotate-180 +kms_big_fb@yf-tiled-32bpp-rotate-270 +kms_big_fb@yf-tiled-64bpp-rotate-0 +kms_big_fb@yf-tiled-64bpp-rotate-90 +kms_big_fb@yf-tiled-64bpp-rotate-180 +kms_big_fb@yf-tiled-64bpp-rotate-270 +kms_big_fb@4-tiled-8bpp-rotate-0 +kms_big_fb@4-tiled-8bpp-rotate-90 +kms_big_fb@4-tiled-8bpp-rotate-180 +kms_big_fb@4-tiled-8bpp-rotate-270 +kms_big_fb@4-tiled-16bpp-rotate-0 +kms_big_fb@4-tiled-16bpp-rotate-90 +kms_big_fb@4-tiled-16bpp-rotate-180 +kms_big_fb@4-tiled-16bpp-rotate-270 +kms_big_fb@4-tiled-32bpp-rotate-0 +kms_big_fb@4-tiled-32bpp-rotate-90 +kms_big_fb@4-tiled-32bpp-rotate-180 +kms_big_fb@4-tiled-32bpp-rotate-270 +kms_big_fb@4-tiled-64bpp-rotate-0 +kms_big_fb@4-tiled-64bpp-rotate-90 +kms_big_fb@4-tiled-64bpp-rotate-180 +kms_big_fb@4-tiled-64bpp-rotate-270 +kms_big_fb@linear-max-hw-stride-32bpp-rotate-0 +kms_big_fb@linear-max-hw-stride-32bpp-rotate-180 +kms_big_fb@linear-max-hw-stride-64bpp-rotate-0 +kms_big_fb@linear-max-hw-stride-64bpp-rotate-180 +kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-0 +kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-0-async-flip +kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-180 +kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-180-async-flip +kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0 +kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-async-flip +kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180 +kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-async-flip +kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-0-hflip +kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip +kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-180-hflip +kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip +kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-hflip +kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip +kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-hflip +kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip +kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0 +kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0-async-flip +kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180 +kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip +kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0 +kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-async-flip +kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180 +kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-async-flip +kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0-hflip +kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip +kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-hflip +kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip +kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-hflip +kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip +kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip +kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip +kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0 +kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-async-flip +kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180 +kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-async-flip +kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0 +kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0-async-flip +kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180 +kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180-async-flip +kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip +kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip +kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-hflip +kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip +kms_big_fb@yf-tiled-max-hw-stride-64