[{"id":3679216,"web_url":"http://patchwork.ozlabs.org/comment/3679216/","msgid":"<CAFLszTiX4nRi_5LFMNmUem_Yo1HiJxD6btU_43JnfjhOvNMx8A@mail.gmail.com>","list_archive_url":null,"date":"2026-04-20T04:32:10","subject":"Re: [PATCH v1] mach-snapdragon: Add KVM hypervisor support","submitter":{"id":6170,"url":"http://patchwork.ozlabs.org/api/people/6170/","name":"Simon Glass","email":"sjg@chromium.org"},"content":"Hi Aswin,\n\nOn 2026-04-19T17:38:29, Aswin Murugan <aswin.murugan@oss.qualcomm.com> wrote:\n> mach-snapdragon: Add KVM hypervisor support\n>\n> Enable Linux KVM virtualization on Snapdragon SoCs.\n>\n> Introduce CONFIG_QCOM_KVM_SUPPORT to select KVM or Gunyah\n> hypervisor modes at build time.\n>\n> qcom-priv.h:\n>  - Add TrustZone SMC interface definitions and parameter IDs\n>  - Define hypervisor boot types (GUNYAH=0, KVM=1)\n>  - Add TCR_EL2 bit field definitions for memory config\n>\n> board.c:\n>  - Add qcom_configure_kvm_hypervisor() with EL-aware logic\n>  - EL2: Perform direct SMC call for hypervisor setup\n>  - EL1: Save context, disable caches, run SMC, restore state,\n>    reconfigure TCR_EL2, re-enable caches\n>  - Add qcom_configure_gunyah_hypervisor() for standard flow\n>  - Add SCM service availability checks\n>\n> [...]\n>\n> arch/arm/mach-snapdragon/Kconfig     |   7 ++\n>  arch/arm/mach-snapdragon/board.c     | 154 +++++++++++++++++++++++++++++++++++\n>  arch/arm/mach-snapdragon/qcom-priv.h |  31 +++++++\n>  3 files changed, 192 insertions(+)\n\n> diff --git a/arch/arm/mach-snapdragon/board.c b/arch/arm/mach-snapdragon/board.c\n> @@ -510,6 +510,154 @@ void __weak qcom_late_init(void)\n> +     log_debug(\"At EL1, saving register context\\n\");\n> +\n> +     u64 ttbr0_el1, tcr_el1, tcr_el2, mair_el1;\n> +     u64 t0sz, phys_addr_size;\n\nPlease can you move these declarations to the top of the function\nalongside res and current_el.\n\n> diff --git a/arch/arm/mach-snapdragon/board.c b/arch/arm/mach-snapdragon/board.c\n> @@ -510,6 +510,154 @@ void __weak qcom_late_init(void)\n> +     if (current_el != 2) {\n> +             log_debug(\"No EL2 transition, skipping TCR_EL2 config\\n\");\n> +             icache_enable();\n> +             dcache_enable();\n> +             log_warning(\"KVM hypervisor configuration failed\\n\");\n> +             return 0;\n> +     }\n\nThis logs a warning saying configuration failed but returns 0\n(success). If the EL2 transition truly failed, shouldn't it an error?\nIf it is intentionally a soft failure, the log message should clarify\nwhy.\n\n> diff --git a/arch/arm/mach-snapdragon/board.c b/arch/arm/mach-snapdragon/board.c\n> @@ -510,6 +510,154 @@ void __weak qcom_late_init(void)\n> +     arm_smccc_smc(TZ_INFO_IS_SVC_AVAILABLE_ID,\n> +                   TZ_INFO_IS_SVC_AVAILABLE_ID_PARAM_ID,\n> +                   TZ_CONFIGURE_MILESTONE_SERVICE_ID,\n> +                   0, 0, 0, 0, 0, &res);\n> +\n> +     if (res.a0 != 0)\n> +             log_debug(\"KVM milestone service not available (0x%lx)\\n\", res.a0);\n\nJust to check: if the service is not available, should the function\ncontinue anyway? In qcom_configure_gunyah_hypervisor() you return\nearly when the service check fails, but here you continue regardless.\nA brief comment explaining why would help.\n\n> diff --git a/arch/arm/mach-snapdragon/qcom-priv.h b/arch/arm/mach-snapdragon/qcom-priv.h\n> @@ -17,6 +17,37 @@ extern enum qcom_boot_source qcom_boot_source;\n> +/* TCR_EL2 bit field definitions */\n> +#define TCR_T0SZ_MASK                                0x1FUL\n> +#define TCR_PS_MASK                          (0x7UL << 32)\n> +#define TCR_PS_SHIFT                         16\n> +#define TCR_SH_ORGN_IRGN_MASK                        0x3F00UL\n> +#define TCR_SH_INNER_SHAREABLE                       (3UL << 12)\n> +#define TCR_ORGN_WRITE_BACK_ALLOC            BIT(10)\n> +#define TCR_IRGN_WRITE_BACK_ALLOC            BIT(8)\n\narch/arm/include/asm/armv8/mmu.h already defines TCR_IRGN_WBWA,\nTCR_ORGN_WBWA, and TCR_SHARED_INNER with the same values. Please can\nyou reuse those existing definitions rather than duplicating them\nhere.\n\nRegards,\nSimon","headers":{"Return-Path":"<u-boot-bounces@lists.denx.de>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=chromium.org header.i=@chromium.org header.a=rsa-sha256\n header.s=google header.b=CYAYhCTt;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de\n (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de;\n envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org)","phobos.denx.de;\n dmarc=pass (p=none dis=none) header.from=chromium.org","phobos.denx.de;\n spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de","phobos.denx.de;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=chromium.org header.i=@chromium.org\n header.b=\"CYAYhCTt\";\n\tdkim-atps=neutral","phobos.denx.de;\n dmarc=pass (p=none dis=none) header.from=chromium.org","phobos.denx.de;\n spf=pass smtp.mailfrom=sjg@chromium.org"],"Received":["from phobos.denx.de (phobos.denx.de\n [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fzXdm4kmlz1yGs\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 20 Apr 2026 14:32:28 +1000 (AEST)","from h2850616.stratoserver.net (localhost [IPv6:::1])\n\tby phobos.denx.de (Postfix) with ESMTP id 95D5A83FF5;\n\tMon, 20 Apr 2026 06:32:26 +0200 (CEST)","by phobos.denx.de (Postfix, from userid 109)\n id A6B168419E; Mon, 20 Apr 2026 06:32:25 +0200 (CEST)","from mail-ej1-x634.google.com (mail-ej1-x634.google.com\n [IPv6:2a00:1450:4864:20::634])\n (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits))\n (No client certificate requested)\n by phobos.denx.de (Postfix) with ESMTPS id A4DA283B99\n for <u-boot@lists.denx.de>; Mon, 20 Apr 2026 06:32:23 +0200 (CEST)","by mail-ej1-x634.google.com with SMTP id\n a640c23a62f3a-b886fc047d5so472659266b.3\n for <u-boot@lists.denx.de>; Sun, 19 Apr 2026 21:32:23 -0700 (PDT)"],"X-Spam-Checker-Version":"SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de","X-Spam-Level":"","X-Spam-Status":"No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,\n DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,\n RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham\n autolearn_force=no version=3.4.2","ARC-Seal":"i=1; a=rsa-sha256; t=1776659543; cv=none;\n d=google.com; s=arc-20240605;\n b=JitRbPiCERGASnyEQO1B+6bRWZiIN+QDP7VRzUdEigK5xL6aLbrehT0VOzF9SeeixT\n kwHGPKybLu9jP5+7/7tMhd29C2qyWma+5q04QC6GXJg5pwuTgulwQbGPIND/xZeHNQGS\n SHnShMSBue3WDrlMkvjMZT8iD8kCiwDvdYfqghrGCyT+NDePzBApX9Gaq2w0qh83Rocb\n zwyMvA1IUmmoigdyJ7kamSit+8r50Lmn7bEGlS292gmGhGW/+2uQ8Ag/w7OT4YVjBKRI\n eVF51z+QMPocssgkcK34WLQm51F+PPgs9pl5Mq3G3kceVy08HZwdYOB22iZHwf0dNh6P\n DaSw==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;\n s=arc-20240605;\n h=cc:to:subject:message-id:date:from:in-reply-to:references\n :mime-version:dkim-signature;\n bh=ksfLnAvlQE3IafLgHzn9DaWAQpft/Zi0vinjfcscrMM=;\n fh=23XXZvS0T0zHDBT90uSA9CIN0i4lw5UrnU6YbHHSbsc=;\n b=RqxES4eWPBXNad3JGsHQ5l6RzYz+u0S7l0amioZLy4UT+jzn+Qv7FkWcWsIvB5m9+d\n UMhblgiZtHEasNbBu+12DX04S432Ao164/3ajVhanoO7oZYVghsQ0Fb7ZWwfiW+Jcsgh\n xT/KzNQeJR6beci1JyrLk+vUUFx+IUIEmMb1NDjs86ksbniHzFFy8CAEhe4YAkODgcUF\n HDaMb0DRmFDilFx1+Zvi4D5GuSymJEKO5407ptjknZL6tB03ygrgsqTJ1paMZftgcBA3\n eI8yd4PdU+4a3rihO62iDdjn6yztShQF266K3lkJ6tW0FXkVsWYh5Y4uhAD4N41EMCf4\n ZO+w==; darn=lists.denx.de","ARC-Authentication-Results":"i=1; mx.google.com; arc=none","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=chromium.org; s=google; t=1776659543; x=1777264343; darn=lists.denx.de;\n h=cc:to:subject:message-id:date:from:in-reply-to:references\n :mime-version:from:to:cc:subject:date:message-id:reply-to;\n bh=ksfLnAvlQE3IafLgHzn9DaWAQpft/Zi0vinjfcscrMM=;\n b=CYAYhCTtGXtExv7RlcfxKucEHWHPZphwgbmn1R0Af+um/IQrSkZHzIQju3NF7CVG84\n S4ihGnH1SkDFz/TSBk75Qgc6MLQ9tvmhSMGzaVzNESXNDW5zaKSFjvL7jfkG/pdOOEdu\n Idsjerei7tX/3l6GcJwU3EadShDWQLB9zRGvA=","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776659543; x=1777264343;\n h=cc:to:subject:message-id:date:from:in-reply-to:references\n :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date\n :message-id:reply-to;\n bh=ksfLnAvlQE3IafLgHzn9DaWAQpft/Zi0vinjfcscrMM=;\n b=QqNqLDWxeSa0knSFmM78qcroPiigvchR91UR4AECjAcPTTmlhHHgVCeYqByceQJEOt\n rS6KmOHKHSF+uEYbn0fnRhcZc6jnCbNiRd8Ck6oLDAtfEohP3+Rtb1BQijnW6bigjVoR\n SJ6t4vkfaWTum43GuLDh4uKycP1MniHx41i5sD3XHrTqa7MUC/6YCC/yg4ADl8yh6q1W\n z0dVga8pzV8do1aZ4tYXLNXWcbg0u/o6dRISKR9VXEPerqGA/Vp+s6dR6R7OYa/Fkkmb\n h6ihdQS+6qXUSj15bp4l0MzRDk5MUgN1FeKM6B08bu6ZFxX06aYk+S6+cRA2SXiv/7pT\n ljOw==","X-Forwarded-Encrypted":"i=1;\n AFNElJ9VxzOgdUDDLCWLKi5nwyHqWT+OCs1KOY5KGMQt351DsHsu2HodgktBacHiNwHaqLAzVRmZkYg=@lists.denx.de","X-Gm-Message-State":"AOJu0Yxvc8kNsrC+yu4K60grZxyd85/ZW2CvybDhOAUtQzTc4gKo7AvP\n RCY3sFSGgDLzaCSqPOpMFr+k0E1auup3ZM/LRjC9NEEhWIFWHdZOjgHsqdIdn0VN9WoPoX3SXw9\n LwvLQSQ9M6NCyVlmd9PlBOt0KTOZaF7bReQl8FFcjJGDZ30zrMQRvHg==","X-Gm-Gg":"AeBDieuztT0b2VqLE85VH+hZnTRkV85NKYMx2Y3DJvC7bUbsf3uvF8R55/KJr91aXu1\n z6S0KYbbgcH17NOc4EzHmhWUQEwGGWGEKHr/S5kD1mEBWHTj1QwSWdM73prNu3iY6t3VJzOdZKO\n OUI2rqUe/wUWf8U1rPNyg1i38hndF8siRxYfYsjU9J86Jn3OCYIJ+qRXDSgcfmUtsbXvXm0sYg/\n C9hiSRRX+Vi11EfWyZYyJ6G1Wvmq2c1mdinJRnUvgUAT+4CesUklBxb3hlK6r7bmy1M8oLzDsQf\n e0vzbV3dV6k2wAP/Cn4w","X-Received":"by 2002:a17:906:f58e:b0:b9e:8e4:8765 with SMTP id\n a640c23a62f3a-ba41bacfcefmr521982366b.10.1776659543039; Sun, 19 Apr 2026\n 21:32:23 -0700 (PDT)","MIME-Version":"1.0","References":"<20260419173829.1074404-1-aswin.murugan@oss.qualcomm.com>","In-Reply-To":"<20260419173829.1074404-1-aswin.murugan@oss.qualcomm.com>","From":"Simon Glass <sjg@chromium.org>","Date":"Mon, 20 Apr 2026 16:32:10 +1200","X-Gm-Features":"AQROBzDY59pCEWUrP8PCT3Pxm1C34OT88gwFPvGdhL8gX7-nbBgkXru1TrxM41E","Message-ID":"\n <CAFLszTiX4nRi_5LFMNmUem_Yo1HiJxD6btU_43JnfjhOvNMx8A@mail.gmail.com>","Subject":"Re: [PATCH v1] mach-snapdragon: Add KVM hypervisor support","To":"aswin.murugan@oss.qualcomm.com","Cc":"trini@konsulko.com, casey.connolly@linaro.org, neil.armstrong@linaro.org,\n sumit.garg@kernel.org, sughosh.ganu@arm.com, gchan9527@gmail.com,\n u-boot-qcom@groups.io, u-boot@lists.denx.de","Content-Type":"text/plain; charset=\"UTF-8\"","X-BeenThere":"u-boot@lists.denx.de","X-Mailman-Version":"2.1.39","Precedence":"list","List-Id":"U-Boot discussion <u-boot.lists.denx.de>","List-Unsubscribe":"<https://lists.denx.de/options/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=unsubscribe>","List-Archive":"<https://lists.denx.de/pipermail/u-boot/>","List-Post":"<mailto:u-boot@lists.denx.de>","List-Help":"<mailto:u-boot-request@lists.denx.de?subject=help>","List-Subscribe":"<https://lists.denx.de/listinfo/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=subscribe>","Errors-To":"u-boot-bounces@lists.denx.de","Sender":"\"U-Boot\" <u-boot-bounces@lists.denx.de>","X-Virus-Scanned":"clamav-milter 0.103.8 at phobos.denx.de","X-Virus-Status":"Clean"}},{"id":3679274,"web_url":"http://patchwork.ozlabs.org/comment/3679274/","msgid":"<7ee17361-2edc-42ab-a56d-20167f3bd02b@linaro.org>","list_archive_url":null,"date":"2026-04-20T07:50:36","subject":"Re: [PATCH v1] mach-snapdragon: Add KVM hypervisor support","submitter":{"id":84903,"url":"http://patchwork.ozlabs.org/api/people/84903/","name":"Neil Armstrong","email":"neil.armstrong@linaro.org"},"content":"Hi,\n\nOn 4/19/26 19:38, Aswin Murugan wrote:\n> Enable Linux KVM virtualization on Snapdragon SoCs.\n> \n> Introduce CONFIG_QCOM_KVM_SUPPORT to select KVM or Gunyah\n> hypervisor modes at build time.\n\nPlease stop using KVW when disabling Gunyah, KVM is a possible hypervisor when running EL2,\nbut is completely optional. I know internally you refer to KVM when not using Gunyah,\nbut this make 0 sense at all to user this term when writing patches on the mailing-list.\n\nJust rewrite like this: add support for disabling Gunyah or add support for booting into EL2\n\n> \n> qcom-priv.h:\n>   - Add TrustZone SMC interface definitions and parameter IDs\n>   - Define hypervisor boot types (GUNYAH=0, KVM=1)\n>   - Add TCR_EL2 bit field definitions for memory config\n> \n> board.c:\n>   - Add qcom_configure_kvm_hypervisor() with EL-aware logic\n>   - EL2: Perform direct SMC call for hypervisor setup\n>   - EL1: Save context, disable caches, run SMC, restore state,\n>     reconfigure TCR_EL2, re-enable caches\n>   - Add qcom_configure_gunyah_hypervisor() for standard flow\n>   - Add SCM service availability checks\n\nNo need to to a summary of the patch, if it changes to much stuff (which seems to be the case here)\njust split it into multiple small changes, and explain WHY instead of WHAT in the commit message.\n\n> \n> Default mode remains Gunyah. Enable CONFIG_QCOM_KVM_SUPPORT to\n> select KVM for Linux.\n\nNeil\n\n> \n> Signed-off-by: Aswin Murugan <aswin.murugan@oss.qualcomm.com>\n> ---\n>   arch/arm/mach-snapdragon/Kconfig     |   7 ++\n>   arch/arm/mach-snapdragon/board.c     | 154 +++++++++++++++++++++++++++\n>   arch/arm/mach-snapdragon/qcom-priv.h |  31 ++++++\n>   3 files changed, 192 insertions(+)\n> \n> diff --git a/arch/arm/mach-snapdragon/Kconfig b/arch/arm/mach-snapdragon/Kconfig\n> index d3de8693b5a..2e5676945ca 100644\n> --- a/arch/arm/mach-snapdragon/Kconfig\n> +++ b/arch/arm/mach-snapdragon/Kconfig\n> @@ -42,4 +42,11 @@ config SYS_CONFIG_NAME\n>   \t  Based on this option include/configs/<CONFIG_SYS_CONFIG_NAME>.h header\n>   \t  will be used for board configuration.\n>   \n> +config QCOM_KVM_SUPPORT\n> +\tbool \"Enable KVM support for Qualcomm platforms\"\n> +\tdepends on ARM64\n> +\thelp\n> +\t  This configures the hypervisor interface during boot to support\n> +\t  KVM virtualization instead of the default Gunyah hypervisor.\n> +\n>   endif\n> diff --git a/arch/arm/mach-snapdragon/board.c b/arch/arm/mach-snapdragon/board.c\n> index 5fb3240acc5..2926dd8ccc0 100644\n> --- a/arch/arm/mach-snapdragon/board.c\n> +++ b/arch/arm/mach-snapdragon/board.c\n> @@ -510,6 +510,154 @@ void __weak qcom_late_init(void)\n>   {\n>   }\n>   \n> +/**\n> + * qcom_configure_kvm_hypervisor() - Configure hypervisor for KVM guest mode\n> + *\n> + * Configures the hypervisor for KVM operation:\n> + * - EL2 path: Direct SMC call\n> + * - EL1 path: Save context, disable caches, SMC call, restore context\n> + *\n> + * Return: 0 on success, negative error code on failure\n> + */\n> +static int qcom_configure_kvm_hypervisor(void)\n> +{\n> +\tstruct arm_smccc_res res;\n> +\tu64 current_el;\n> +\n> +\tasm volatile(\"mrs %0, CurrentEL\" : \"=r\" (current_el));\n> +\tcurrent_el = (current_el >> 2) & 0x3;\n> +\n> +\tlog_info(\"Configuring hypervisor for KVM (EL%llu)\\n\", current_el);\n> +\n> +\tarm_smccc_smc(TZ_INFO_IS_SVC_AVAILABLE_ID,\n> +\t\t      TZ_INFO_IS_SVC_AVAILABLE_ID_PARAM_ID,\n> +\t\t      TZ_CONFIGURE_MILESTONE_SERVICE_ID,\n> +\t\t      0, 0, 0, 0, 0, &res);\n> +\n> +\tif (res.a0 != 0)\n> +\t\tlog_debug(\"KVM milestone service not available (0x%lx)\\n\", res.a0);\n> +\n> +\tif (current_el == 2) {\n> +\t\tlog_debug(\"At EL2\\n\");\n> +\n> +\t\tarm_smccc_smc(TZ_CONFIGURE_MILESTONE_SERVICE_ID,\n> +\t\t\t      TZ_CONFIGURE_MILESTONE_SERVICE_PARAM_ID,\n> +\t\t\t      0, 0, QCOM_HYP_BOOT_TYPE_KVM,\n> +\t\t\t      0, 0, 0, &res);\n> +\n> +\t\tif (res.a0 != 0) {\n> +\t\t\tlog_err(\"Hypervisor configuration failed: 0x%lx\\n\", res.a0);\n> +\t\t\treturn -EIO;\n> +\t\t}\n> +\n> +\t\tlog_info(\"KVM hypervisor configured\\n\");\n> +\t\treturn 0;\n> +\t}\n> +\n> +\tlog_debug(\"At EL1, saving register context\\n\");\n> +\n> +\tu64 ttbr0_el1, tcr_el1, tcr_el2, mair_el1;\n> +\tu64 t0sz, phys_addr_size;\n> +\n> +\t/* Save EL1 system register context */\n> +\tasm volatile(\"mrs %0, ttbr0_el1\" : \"=r\" (ttbr0_el1));\n> +\tasm volatile(\"mrs %0, tcr_el1\" : \"=r\" (tcr_el1));\n> +\tasm volatile(\"mrs %0, mair_el1\" : \"=r\" (mair_el1));\n> +\n> +\tt0sz = tcr_el1 & TCR_T0SZ_MASK;\n> +\tphys_addr_size = tcr_el1 & TCR_PS_MASK;\n> +\n> +\tlog_debug(\"Saved context: TTBR0=0x%llx TCR=0x%llx MAIR=0x%llx\\n\",\n> +\t\t  ttbr0_el1, tcr_el1, mair_el1);\n> +\n> +\ticache_disable();\n> +\tdcache_disable();\n> +\n> +\tarm_smccc_smc(TZ_CONFIGURE_MILESTONE_SERVICE_ID,\n> +\t\t      TZ_CONFIGURE_MILESTONE_SERVICE_PARAM_ID,\n> +\t\t      0, 0, QCOM_HYP_BOOT_TYPE_KVM,\n> +\t\t      0, 0, 0, &res);\n> +\n> +\tif (res.a0 != 0) {\n> +\t\tlog_err(\"Hypervisor configuration failed: 0x%lx\\n\", res.a0);\n> +\t\ticache_enable();\n> +\t\tdcache_enable();\n> +\t\treturn -EIO;\n> +\t}\n> +\n> +\tasm volatile(\"mrs %0, CurrentEL\" : \"=r\" (current_el));\n> +\tcurrent_el = (current_el >> 2) & 0x3;\n> +\n> +\tasm volatile(\"msr ttbr0_el1, %0\" : : \"r\" (ttbr0_el1));\n> +\tasm volatile(\"isb\");\n> +\n> +\tif (current_el != 2) {\n> +\t\tlog_debug(\"No EL2 transition, skipping TCR_EL2 config\\n\");\n> +\t\ticache_enable();\n> +\t\tdcache_enable();\n> +\t\tlog_warning(\"KVM hypervisor configuration failed\\n\");\n> +\t\treturn 0;\n> +\t}\n> +\n> +\t/* Read current TCR_EL2 and reconfigure it */\n> +\tasm volatile(\"mrs %0, tcr_el2\" : \"=r\" (tcr_el2));\n> +\n> +\ttcr_el2 &= ~(TCR_T0SZ_MASK | (0x7UL << 16));\n> +\ttcr_el2 |= t0sz | (phys_addr_size >> TCR_PS_SHIFT);\n> +\n> +\ttcr_el2 &= ~TCR_SH_ORGN_IRGN_MASK;\n> +\ttcr_el2 |= TCR_SH_INNER_SHAREABLE |\n> +\t\t   TCR_ORGN_WRITE_BACK_ALLOC |\n> +\t\t   TCR_IRGN_WRITE_BACK_ALLOC;\n> +\n> +\tasm volatile(\"msr tcr_el2, %0\" : : \"r\" (tcr_el2));\n> +\tasm volatile(\"msr mair_el1, %0\" : : \"r\" (mair_el1));\n> +\tasm volatile(\"isb\");\n> +\n> +\ticache_enable();\n> +\tdcache_enable();\n> +\n> +\tlog_info(\"KVM hypervisor configured\\n\");\n> +\treturn 0;\n> +}\n> +\n> +/**\n> + * qcom_configure_gunyah_hypervisor() - Configure hypervisor for Gunyah mode\n> + *\n> + * Configures the hypervisor for standard Gunyah operation.\n> + *\n> + * Return: 0 on success, negative error code on failure\n> + */\n> +static int qcom_configure_gunyah_hypervisor(void)\n> +{\n> +\tstruct arm_smccc_res res;\n> +\n> +\tlog_info(\"Configuring hypervisor for Gunyah mode\\n\");\n> +\n> +\tarm_smccc_smc(TZ_INFO_IS_SVC_AVAILABLE_ID,\n> +\t\t      TZ_INFO_IS_SVC_AVAILABLE_ID_PARAM_ID,\n> +\t\t      TZ_CONFIGURE_MILESTONE_SERVICE_ID,\n> +\t\t      0, 0, 0, 0, 0, &res);\n> +\n> +\tif (res.a0 != 0) {\n> +\t\tlog_debug(\"Hypervisor milestone service not available (0x%lx)\\n\", res.a0);\n> +\t\treturn 0;\n> +\t}\n> +\n> +\tarm_smccc_smc(TZ_CONFIGURE_MILESTONE_SERVICE_ID,\n> +\t\t      TZ_CONFIGURE_MILESTONE_SERVICE_PARAM_ID,\n> +\t\t      0, 0, QCOM_HYP_BOOT_TYPE_GUNYAH,\n> +\t\t      0, 0, 0, &res);\n> +\n> +\tif (res.a0 != 0) {\n> +\t\tlog_err(\"Hypervisor configuration failed: 0x%lx\\n\", res.a0);\n> +\t\treturn -EIO;\n> +\t}\n> +\n> +\tlog_info(\"Gunyah hypervisor configured\\n\");\n> +\treturn 0;\n> +}\n> +\n>   #define KERNEL_COMP_SIZE\tSZ_64M\n> arch/arm/mach-snapdragon/Kconfig #ifdef CONFIG_FASTBOOT_BUF_SIZE\n>   #define FASTBOOT_BUF_SIZE CONFIG_FASTBOOT_BUF_SIZE\n> @@ -570,6 +718,12 @@ int board_late_init(void)\n>   \tqcom_late_init();\n>   \n>   \tqcom_show_boot_source();\n> +\n> +\tif (IS_ENABLED(CONFIG_QCOM_KVM_SUPPORT))\n> +\t\tqcom_configure_kvm_hypervisor();\n> +\telse\n> +\t\tqcom_configure_gunyah_hypervisor();\n> +\n>   \t/* Configure the dfu_string for capsule updates */\n>   \tqcom_configure_capsule_updates();\n>   \n> diff --git a/arch/arm/mach-snapdragon/qcom-priv.h b/arch/arm/mach-snapdragon/qcom-priv.h\n> index b8bf574e8bb..a5d9dec6aa7 100644\n> --- a/arch/arm/mach-snapdragon/qcom-priv.h\n> +++ b/arch/arm/mach-snapdragon/qcom-priv.h\n> @@ -17,6 +17,37 @@ enum qcom_boot_source {\n>   \n>   extern enum qcom_boot_source qcom_boot_source;\n>   \n> +/* TrustZone SMC definitions */\n> +#define TZ_SYSCALL_CREATE_SMC_ID(o, s, f) \\\n> +\t((u32)((((o) & 0x3f) << 24) | (((s) & 0xff) << 8) | ((f) & 0xff)))\n> +\n> +#define TZ_OWNER_SIP\t\t\t\t2\n> +#define TZ_SVC_BOOT\t\t\t\t1\n> +#define TZ_SVC_INFO\t\t\t\t6\n> +#define TZ_BOOT_CMD_KVM_MILESTONE\t\t0x21\n> +#define TZ_INFO_IS_SVC_AVAILABLE_CMD\t\t0x01\n> +\n> +#define TZ_CONFIGURE_MILESTONE_SERVICE_ID \\\n> +\tTZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_BOOT, TZ_BOOT_CMD_KVM_MILESTONE)\n> +#define TZ_CONFIGURE_MILESTONE_SERVICE_PARAM_ID\t\t0x23\n> +\n> +#define TZ_INFO_IS_SVC_AVAILABLE_ID \\\n> +\tTZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_INFO, TZ_INFO_IS_SVC_AVAILABLE_CMD)\n> +#define TZ_INFO_IS_SVC_AVAILABLE_ID_PARAM_ID\t\t0x1\n> +\n> +/* Hypervisor boot types */\n> +#define QCOM_HYP_BOOT_TYPE_GUNYAH\t\t0\n> +#define QCOM_HYP_BOOT_TYPE_KVM\t\t\t1\n> +\n> +/* TCR_EL2 bit field definitions */\n> +#define TCR_T0SZ_MASK\t\t\t\t0x1FUL\n> +#define TCR_PS_MASK\t\t\t\t(0x7UL << 32)\n> +#define TCR_PS_SHIFT\t\t\t\t16\n> +#define TCR_SH_ORGN_IRGN_MASK\t\t\t0x3F00UL\n> +#define TCR_SH_INNER_SHAREABLE\t\t\t(3UL << 12)\n> +#define TCR_ORGN_WRITE_BACK_ALLOC\t\tBIT(10)\n> +#define TCR_IRGN_WRITE_BACK_ALLOC\t\tBIT(8)\n> +\n>   #if IS_ENABLED(CONFIG_EFI_HAVE_CAPSULE_SUPPORT)\n>   void qcom_configure_capsule_updates(void);\n>   #else","headers":{"Return-Path":"<u-boot-bounces@lists.denx.de>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256\n header.s=google header.b=NNoF7cTx;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de\n (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de;\n envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org)","phobos.denx.de;\n dmarc=pass (p=none dis=none) header.from=linaro.org","phobos.denx.de;\n spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de","phobos.denx.de;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=linaro.org header.i=@linaro.org header.b=\"NNoF7cTx\";\n\tdkim-atps=neutral","phobos.denx.de;\n dmarc=pass (p=none dis=none) header.from=linaro.org","phobos.denx.de;\n spf=pass smtp.mailfrom=neil.armstrong@linaro.org"],"Received":["from phobos.denx.de (phobos.denx.de\n [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fzd2Y49qsz1yCv\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 20 Apr 2026 17:50:45 +1000 (AEST)","from h2850616.stratoserver.net (localhost [IPv6:::1])\n\tby phobos.denx.de (Postfix) with ESMTP id 9AD3B839D5;\n\tMon, 20 Apr 2026 09:50:42 +0200 (CEST)","by phobos.denx.de (Postfix, from userid 109)\n id 147C98426E; Mon, 20 Apr 2026 09:50:42 +0200 (CEST)","from mail-wr1-x42e.google.com (mail-wr1-x42e.google.com\n [IPv6:2a00:1450:4864:20::42e])\n (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits))\n (No client certificate requested)\n by phobos.denx.de (Postfix) with ESMTPS id BD6C383693\n for <u-boot@lists.denx.de>; Mon, 20 Apr 2026 09:50:38 +0200 (CEST)","by mail-wr1-x42e.google.com with SMTP id\n ffacd0b85a97d-43fde5b81a1so1938478f8f.0\n for <u-boot@lists.denx.de>; Mon, 20 Apr 2026 00:50:38 -0700 (PDT)","from ?IPV6:2a01:e0a:106d:1080:8290:9fd8:8af0:67dc?\n ([2a01:e0a:106d:1080:8290:9fd8:8af0:67dc])\n by smtp.gmail.com with ESMTPSA id\n ffacd0b85a97d-43fe4e4d525sm26101654f8f.31.2026.04.20.00.50.37\n (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n Mon, 20 Apr 2026 00:50:37 -0700 (PDT)"],"X-Spam-Checker-Version":"SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de","X-Spam-Level":"","X-Spam-Status":"No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,\n DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED,\n SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.2","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=linaro.org; s=google; t=1776671438; x=1777276238; darn=lists.denx.de;\n h=content-transfer-encoding:in-reply-to:organization:autocrypt\n :content-language:references:to:subject:reply-to:from:user-agent\n :mime-version:date:message-id:from:to:cc:subject:date:message-id\n :reply-to; bh=QYhtai5h1bxCDwjBGSdAwDeBGUYQ0+3ppZKjOcPc3pU=;\n b=NNoF7cTxUoFtSJM7V7XjmNg5EoEKt2QCMFPw0Z5ByD3VicpK8yW5djXpDT0xxzT8wZ\n Vm1CcMM/Y68yJbKazFamSCzw41aCPzjNhjJd7YTxE4eoPuGFKHMBXW9bDp+4Kxgu721b\n 9qAavy56lznVmB7nf9qvbgjQURpK4stckmYvfAmErLsoC98gJUcNQQ/mVB3yj+MYms9A\n 32y5AvaEvWKjmMidZQ4dK07PHmtxaWN/ha/yTQzK0Jns/hPAlZPHhX2zQngXrxaFnN7o\n IdB3d84u1vsmgaoJv136Ha1OYF5J3yLC6kpUCShx6NcTR/rfS0JyERIyT2SIzCmADdTc\n ixqg==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776671438; x=1777276238;\n h=content-transfer-encoding:in-reply-to:organization:autocrypt\n :content-language:references:to:subject:reply-to:from:user-agent\n :mime-version:date:message-id:x-gm-gg:x-gm-message-state:from:to:cc\n :subject:date:message-id:reply-to;\n bh=QYhtai5h1bxCDwjBGSdAwDeBGUYQ0+3ppZKjOcPc3pU=;\n b=rfiBExCZzsObiapZ/gBXaxOFv4/Y4BLhCvKZGiT3P/d19acBi+4dGOO88H1ZroMJS8\n 5nk8nQxlVLtr2H62sHCEuQFdgeHozt6vTqq2Lyz9Xyxj32rx/whoTQpmNKJS2U+AoxHl\n I21327lGkBvIY+TdeT6HJp0ZtCf3KD4RfYGmOqmGhd6REqUg4bfnx5HghjV43FHGT9/n\n SQa80ySVZPY1iGaCl48NBVWOjXVcBC0ig1LKpipv5Xvp6dbi7Q09iiZ8FUs8BAjSkozQ\n 3wg79npscFcA9/0gUZNhEU4IcfxfFXPtSK51uhhC7jRnmd/6OTo/Vbanx5Sqckq75SB0\n aY5A==","X-Forwarded-Encrypted":"i=1;\n AFNElJ/BwKpwRJWgqYwUcjPDWiADu9Jg9Ag2kjLKn7+Nvgds2bYfAV7hRLAYyzZ9Rl8mJuIXFiB2gv4=@lists.denx.de","X-Gm-Message-State":"AOJu0Yx5e8sBzcltXo/1GJMpgaZaWHOqMLIqwepZzP6M0o4lNZDkg9Oa\n 76ImqKEqxNWS4wry2deVsJ0clAvWPM0YNLegRZ8+p9Zf1Fum1wJJlMu4r5myAQvjLhE=","X-Gm-Gg":"AeBDieusBKS2/D3Rj/ZBN1TQY2IoAUUWS0qtJkyLp0qhVwkKyzMYx8DCaG4fTCJGOlO\n /0nFeLgSPOApdDrEtIQu+HQNZ9uJ0NP/v5dDC4P9Xqf2Fpu3Z6wrNVGaHsC9zQWC4oCVZLOk348\n elZZomtx7+OiqHEc2X0vxWG1vEDVkak4bpnN+wQNKY9GbwYD8TaU/EB4/N+BfJlkygK5sbyq8pm\n fmjWWUsNm59d08TtcvCgZv1XPutjM8G+LIjcBl4BYxQd+Fqxl/wohnnCegVngQT84PLMSz+u5p2\n NkEr9kCc7YA8mggX6k4MmitYE6knRb4I53t0k27H5or5RklRLvJ74HjU45rZ5EY0jAETc5wefRr\n YIcPz7GDa6ln+/5vBHDbGBIV1q46CN1Q+nrrCQmzwzIiVhPqJMLehptqmT3jtqo6Js/CqFmrXXu\n /gx3PL2q1gGqcRxfS0rfFX44JHCQipr+FYeIpl5d/rFDvO6Tkr8GyoqSVT/hMfCpK5pRAOMUxtA\n DXdwYicjrWjxFqzrg==","X-Received":"by 2002:a5d:5f47:0:b0:439:b55d:b0e5 with SMTP id\n ffacd0b85a97d-43fe3dfbfdfmr19289227f8f.28.1776671437919;\n Mon, 20 Apr 2026 00:50:37 -0700 (PDT)","Message-ID":"<7ee17361-2edc-42ab-a56d-20167f3bd02b@linaro.org>","Date":"Mon, 20 Apr 2026 09:50:36 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","From":"neil.armstrong@linaro.org","Subject":"Re: [PATCH v1] mach-snapdragon: Add KVM hypervisor support","To":"Aswin Murugan <aswin.murugan@oss.qualcomm.com>, trini@konsulko.com,\n casey.connolly@linaro.org, sumit.garg@kernel.org, sughosh.ganu@arm.com,\n gchan9527@gmail.com, u-boot-qcom@groups.io, u-boot@lists.denx.de","References":"<20260419173829.1074404-1-aswin.murugan@oss.qualcomm.com>","Content-Language":"en-US, fr","Autocrypt":"addr=neil.armstrong@linaro.org; keydata=\n xsBNBE1ZBs8BCAD78xVLsXPwV/2qQx2FaO/7mhWL0Qodw8UcQJnkrWmgTFRobtTWxuRx8WWP\n GTjuhvbleoQ5Cxjr+v+1ARGCH46MxFP5DwauzPekwJUD5QKZlaw/bURTLmS2id5wWi3lqVH4\n BVF2WzvGyyeV1o4RTCYDnZ9VLLylJ9bneEaIs/7cjCEbipGGFlfIML3sfqnIvMAxIMZrvcl9\n qPV2k+KQ7q+aXavU5W+yLNn7QtXUB530Zlk/d2ETgzQ5FLYYnUDAaRl+8JUTjc0CNOTpCeik\n 80TZcE6f8M76Xa6yU8VcNko94Ck7iB4vj70q76P/J7kt98hklrr85/3NU3oti3nrIHmHABEB\n AAHNKk5laWwgQXJtc3Ryb25nIDxuZWlsLmFybXN0cm9uZ0BsaW5hcm8ub3JnPsLAkQQTAQoA\n OwIbIwULCQgHAwUVCgkICwUWAgMBAAIeAQIXgBYhBInsPQWERiF0UPIoSBaat7Gkz/iuBQJk\n Q5wSAhkBAAoJEBaat7Gkz/iuyhMIANiD94qDtUTJRfEW6GwXmtKWwl/mvqQtaTtZID2dos04\n YqBbshiJbejgVJjy+HODcNUIKBB3PSLaln4ltdsV73SBcwUNdzebfKspAQunCM22Mn6FBIxQ\n GizsMLcP/0FX4en9NaKGfK6ZdKK6kN1GR9YffMJd2P08EO8mHowmSRe/ExAODhAs9W7XXExw\n UNCY4pVJyRPpEhv373vvff60bHxc1k/FF9WaPscMt7hlkbFLUs85kHtQAmr8pV5Hy9ezsSRa\n GzJmiVclkPc2BY592IGBXRDQ38urXeM4nfhhvqA50b/nAEXc6FzqgXqDkEIwR66/Gbp0t3+r\n yQzpKRyQif3OwE0ETVkGzwEIALyKDN/OGURaHBVzwjgYq+ZtifvekdrSNl8TIDH8g1xicBYp\n QTbPn6bbSZbdvfeQPNCcD4/EhXZuhQXMcoJsQQQnO4vwVULmPGgtGf8PVc7dxKOeta+qUh6+\n SRh3vIcAUFHDT3f/Zdspz+e2E0hPV2hiSvICLk11qO6cyJE13zeNFoeY3ggrKY+IzbFomIZY\n 4yG6xI99NIPEVE9lNBXBKIlewIyVlkOaYvJWSV+p5gdJXOvScNN1epm5YHmf9aE2ZjnqZGoM\n Mtsyw18YoX9BqMFInxqYQQ3j/HpVgTSvmo5ea5qQDDUaCsaTf8UeDcwYOtgI8iL4oHcsGtUX\n oUk33HEAEQEAAcLAXwQYAQIACQUCTVkGzwIbDAAKCRAWmrexpM/4rrXiB/sGbkQ6itMrAIfn\n M7IbRuiSZS1unlySUVYu3SD6YBYnNi3G5EpbwfBNuT3H8//rVvtOFK4OD8cRYkxXRQmTvqa3\n 3eDIHu/zr1HMKErm+2SD6PO9umRef8V82o2oaCLvf4WeIssFjwB0b6a12opuRP7yo3E3gTCS\n KmbUuLv1CtxKQF+fUV1cVaTPMyT25Od+RC1K+iOR0F54oUJvJeq7fUzbn/KdlhA8XPGzwGRy\n 4zcsPWvwnXgfe5tk680fEKZVwOZKIEuJC3v+/yZpQzDvGYJvbyix0lHnrCzq43WefRHI5XTT\n QbM0WUIBIcGmq38+OgUsMYu4NzLu7uZFAcmp6h8g","Organization":"Linaro","In-Reply-To":"<20260419173829.1074404-1-aswin.murugan@oss.qualcomm.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"7bit","X-BeenThere":"u-boot@lists.denx.de","X-Mailman-Version":"2.1.39","Precedence":"list","List-Id":"U-Boot discussion <u-boot.lists.denx.de>","List-Unsubscribe":"<https://lists.denx.de/options/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=unsubscribe>","List-Archive":"<https://lists.denx.de/pipermail/u-boot/>","List-Post":"<mailto:u-boot@lists.denx.de>","List-Help":"<mailto:u-boot-request@lists.denx.de?subject=help>","List-Subscribe":"<https://lists.denx.de/listinfo/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=subscribe>","Reply-To":"Neil Armstrong <neil.armstrong@linaro.org>","Errors-To":"u-boot-bounces@lists.denx.de","Sender":"\"U-Boot\" <u-boot-bounces@lists.denx.de>","X-Virus-Scanned":"clamav-milter 0.103.8 at phobos.denx.de","X-Virus-Status":"Clean"}},{"id":3679417,"web_url":"http://patchwork.ozlabs.org/comment/3679417/","msgid":"<aeYt6cz5AVXFc5m3@sumit-xelite>","list_archive_url":null,"date":"2026-04-20T13:45:13","subject":"Re: [PATCH v1] mach-snapdragon: Add KVM hypervisor support","submitter":{"id":90400,"url":"http://patchwork.ozlabs.org/api/people/90400/","name":"Sumit Garg","email":"sumit.garg@kernel.org"},"content":"On Sun, Apr 19, 2026 at 11:08:29PM +0530, Aswin Murugan wrote:\n> Enable Linux KVM virtualization on Snapdragon SoCs.\n> \n> Introduce CONFIG_QCOM_KVM_SUPPORT to select KVM or Gunyah\n> hypervisor modes at build time.\n> \n> qcom-priv.h:\n>  - Add TrustZone SMC interface definitions and parameter IDs\n>  - Define hypervisor boot types (GUNYAH=0, KVM=1)\n>  - Add TCR_EL2 bit field definitions for memory config\n> \n> board.c:\n>  - Add qcom_configure_kvm_hypervisor() with EL-aware logic\n>  - EL2: Perform direct SMC call for hypervisor setup\n>  - EL1: Save context, disable caches, run SMC, restore state,\n>    reconfigure TCR_EL2, re-enable caches\n\nPlease don't switch EL1 -> EL2 in the middle of U-Boot execution which\njust adds these expensive MMU operations during boot.\n\nRather than that just follow the upstream edk2 example to switch from\nEL1 -> EL2 on the first platform specific init code code sequence. Have\na look at this reference [1]. Surely you can keep the switch under a\nconfig option. This will make U-Boot to properly execute either in EL1\nor EL2.\n\n[1] https://github.com/tianocore/edk2-platforms/blob/master/Silicon/Qualcomm/KodiakPkg/Library/KodiakLib/KodiakHelper.S\n\n-Sumit\n\n>  - Add qcom_configure_gunyah_hypervisor() for standard flow\n>  - Add SCM service availability checks\n> \n> Default mode remains Gunyah. Enable CONFIG_QCOM_KVM_SUPPORT to\n> select KVM for Linux.\n> \n> Signed-off-by: Aswin Murugan <aswin.murugan@oss.qualcomm.com>\n> ---\n>  arch/arm/mach-snapdragon/Kconfig     |   7 ++\n>  arch/arm/mach-snapdragon/board.c     | 154 +++++++++++++++++++++++++++\n>  arch/arm/mach-snapdragon/qcom-priv.h |  31 ++++++\n>  3 files changed, 192 insertions(+)\n> \n> diff --git a/arch/arm/mach-snapdragon/Kconfig b/arch/arm/mach-snapdragon/Kconfig\n> index d3de8693b5a..2e5676945ca 100644\n> --- a/arch/arm/mach-snapdragon/Kconfig\n> +++ b/arch/arm/mach-snapdragon/Kconfig\n> @@ -42,4 +42,11 @@ config SYS_CONFIG_NAME\n>  \t  Based on this option include/configs/<CONFIG_SYS_CONFIG_NAME>.h header\n>  \t  will be used for board configuration.\n>  \n> +config QCOM_KVM_SUPPORT\n> +\tbool \"Enable KVM support for Qualcomm platforms\"\n> +\tdepends on ARM64\n> +\thelp\n> +\t  This configures the hypervisor interface during boot to support\n> +\t  KVM virtualization instead of the default Gunyah hypervisor.\n> +\n>  endif\n> diff --git a/arch/arm/mach-snapdragon/board.c b/arch/arm/mach-snapdragon/board.c\n> index 5fb3240acc5..2926dd8ccc0 100644\n> --- a/arch/arm/mach-snapdragon/board.c\n> +++ b/arch/arm/mach-snapdragon/board.c\n> @@ -510,6 +510,154 @@ void __weak qcom_late_init(void)\n>  {\n>  }\n>  \n> +/**\n> + * qcom_configure_kvm_hypervisor() - Configure hypervisor for KVM guest mode\n> + *\n> + * Configures the hypervisor for KVM operation:\n> + * - EL2 path: Direct SMC call\n> + * - EL1 path: Save context, disable caches, SMC call, restore context\n> + *\n> + * Return: 0 on success, negative error code on failure\n> + */\n> +static int qcom_configure_kvm_hypervisor(void)\n> +{\n> +\tstruct arm_smccc_res res;\n> +\tu64 current_el;\n> +\n> +\tasm volatile(\"mrs %0, CurrentEL\" : \"=r\" (current_el));\n> +\tcurrent_el = (current_el >> 2) & 0x3;\n> +\n> +\tlog_info(\"Configuring hypervisor for KVM (EL%llu)\\n\", current_el);\n> +\n> +\tarm_smccc_smc(TZ_INFO_IS_SVC_AVAILABLE_ID,\n> +\t\t      TZ_INFO_IS_SVC_AVAILABLE_ID_PARAM_ID,\n> +\t\t      TZ_CONFIGURE_MILESTONE_SERVICE_ID,\n> +\t\t      0, 0, 0, 0, 0, &res);\n> +\n> +\tif (res.a0 != 0)\n> +\t\tlog_debug(\"KVM milestone service not available (0x%lx)\\n\", res.a0);\n> +\n> +\tif (current_el == 2) {\n> +\t\tlog_debug(\"At EL2\\n\");\n> +\n> +\t\tarm_smccc_smc(TZ_CONFIGURE_MILESTONE_SERVICE_ID,\n> +\t\t\t      TZ_CONFIGURE_MILESTONE_SERVICE_PARAM_ID,\n> +\t\t\t      0, 0, QCOM_HYP_BOOT_TYPE_KVM,\n> +\t\t\t      0, 0, 0, &res);\n> +\n> +\t\tif (res.a0 != 0) {\n> +\t\t\tlog_err(\"Hypervisor configuration failed: 0x%lx\\n\", res.a0);\n> +\t\t\treturn -EIO;\n> +\t\t}\n> +\n> +\t\tlog_info(\"KVM hypervisor configured\\n\");\n> +\t\treturn 0;\n> +\t}\n> +\n> +\tlog_debug(\"At EL1, saving register context\\n\");\n> +\n> +\tu64 ttbr0_el1, tcr_el1, tcr_el2, mair_el1;\n> +\tu64 t0sz, phys_addr_size;\n> +\n> +\t/* Save EL1 system register context */\n> +\tasm volatile(\"mrs %0, ttbr0_el1\" : \"=r\" (ttbr0_el1));\n> +\tasm volatile(\"mrs %0, tcr_el1\" : \"=r\" (tcr_el1));\n> +\tasm volatile(\"mrs %0, mair_el1\" : \"=r\" (mair_el1));\n> +\n> +\tt0sz = tcr_el1 & TCR_T0SZ_MASK;\n> +\tphys_addr_size = tcr_el1 & TCR_PS_MASK;\n> +\n> +\tlog_debug(\"Saved context: TTBR0=0x%llx TCR=0x%llx MAIR=0x%llx\\n\",\n> +\t\t  ttbr0_el1, tcr_el1, mair_el1);\n> +\n> +\ticache_disable();\n> +\tdcache_disable();\n> +\n> +\tarm_smccc_smc(TZ_CONFIGURE_MILESTONE_SERVICE_ID,\n> +\t\t      TZ_CONFIGURE_MILESTONE_SERVICE_PARAM_ID,\n> +\t\t      0, 0, QCOM_HYP_BOOT_TYPE_KVM,\n> +\t\t      0, 0, 0, &res);\n> +\n> +\tif (res.a0 != 0) {\n> +\t\tlog_err(\"Hypervisor configuration failed: 0x%lx\\n\", res.a0);\n> +\t\ticache_enable();\n> +\t\tdcache_enable();\n> +\t\treturn -EIO;\n> +\t}\n> +\n> +\tasm volatile(\"mrs %0, CurrentEL\" : \"=r\" (current_el));\n> +\tcurrent_el = (current_el >> 2) & 0x3;\n> +\n> +\tasm volatile(\"msr ttbr0_el1, %0\" : : \"r\" (ttbr0_el1));\n> +\tasm volatile(\"isb\");\n> +\n> +\tif (current_el != 2) {\n> +\t\tlog_debug(\"No EL2 transition, skipping TCR_EL2 config\\n\");\n> +\t\ticache_enable();\n> +\t\tdcache_enable();\n> +\t\tlog_warning(\"KVM hypervisor configuration failed\\n\");\n> +\t\treturn 0;\n> +\t}\n> +\n> +\t/* Read current TCR_EL2 and reconfigure it */\n> +\tasm volatile(\"mrs %0, tcr_el2\" : \"=r\" (tcr_el2));\n> +\n> +\ttcr_el2 &= ~(TCR_T0SZ_MASK | (0x7UL << 16));\n> +\ttcr_el2 |= t0sz | (phys_addr_size >> TCR_PS_SHIFT);\n> +\n> +\ttcr_el2 &= ~TCR_SH_ORGN_IRGN_MASK;\n> +\ttcr_el2 |= TCR_SH_INNER_SHAREABLE |\n> +\t\t   TCR_ORGN_WRITE_BACK_ALLOC |\n> +\t\t   TCR_IRGN_WRITE_BACK_ALLOC;\n> +\n> +\tasm volatile(\"msr tcr_el2, %0\" : : \"r\" (tcr_el2));\n> +\tasm volatile(\"msr mair_el1, %0\" : : \"r\" (mair_el1));\n> +\tasm volatile(\"isb\");\n> +\n> +\ticache_enable();\n> +\tdcache_enable();\n> +\n> +\tlog_info(\"KVM hypervisor configured\\n\");\n> +\treturn 0;\n> +}\n> +\n> +/**\n> + * qcom_configure_gunyah_hypervisor() - Configure hypervisor for Gunyah mode\n> + *\n> + * Configures the hypervisor for standard Gunyah operation.\n> + *\n> + * Return: 0 on success, negative error code on failure\n> + */\n> +static int qcom_configure_gunyah_hypervisor(void)\n> +{\n> +\tstruct arm_smccc_res res;\n> +\n> +\tlog_info(\"Configuring hypervisor for Gunyah mode\\n\");\n> +\n> +\tarm_smccc_smc(TZ_INFO_IS_SVC_AVAILABLE_ID,\n> +\t\t      TZ_INFO_IS_SVC_AVAILABLE_ID_PARAM_ID,\n> +\t\t      TZ_CONFIGURE_MILESTONE_SERVICE_ID,\n> +\t\t      0, 0, 0, 0, 0, &res);\n> +\n> +\tif (res.a0 != 0) {\n> +\t\tlog_debug(\"Hypervisor milestone service not available (0x%lx)\\n\", res.a0);\n> +\t\treturn 0;\n> +\t}\n> +\n> +\tarm_smccc_smc(TZ_CONFIGURE_MILESTONE_SERVICE_ID,\n> +\t\t      TZ_CONFIGURE_MILESTONE_SERVICE_PARAM_ID,\n> +\t\t      0, 0, QCOM_HYP_BOOT_TYPE_GUNYAH,\n> +\t\t      0, 0, 0, &res);\n> +\n> +\tif (res.a0 != 0) {\n> +\t\tlog_err(\"Hypervisor configuration failed: 0x%lx\\n\", res.a0);\n> +\t\treturn -EIO;\n> +\t}\n> +\n> +\tlog_info(\"Gunyah hypervisor configured\\n\");\n> +\treturn 0;\n> +}\n> +\n>  #define KERNEL_COMP_SIZE\tSZ_64M\n> arch/arm/mach-snapdragon/Kconfig #ifdef CONFIG_FASTBOOT_BUF_SIZE\n>  #define FASTBOOT_BUF_SIZE CONFIG_FASTBOOT_BUF_SIZE\n> @@ -570,6 +718,12 @@ int board_late_init(void)\n>  \tqcom_late_init();\n>  \n>  \tqcom_show_boot_source();\n> +\n> +\tif (IS_ENABLED(CONFIG_QCOM_KVM_SUPPORT))\n> +\t\tqcom_configure_kvm_hypervisor();\n> +\telse\n> +\t\tqcom_configure_gunyah_hypervisor();\n> +\n>  \t/* Configure the dfu_string for capsule updates */\n>  \tqcom_configure_capsule_updates();\n>  \n> diff --git a/arch/arm/mach-snapdragon/qcom-priv.h b/arch/arm/mach-snapdragon/qcom-priv.h\n> index b8bf574e8bb..a5d9dec6aa7 100644\n> --- a/arch/arm/mach-snapdragon/qcom-priv.h\n> +++ b/arch/arm/mach-snapdragon/qcom-priv.h\n> @@ -17,6 +17,37 @@ enum qcom_boot_source {\n>  \n>  extern enum qcom_boot_source qcom_boot_source;\n>  \n> +/* TrustZone SMC definitions */\n> +#define TZ_SYSCALL_CREATE_SMC_ID(o, s, f) \\\n> +\t((u32)((((o) & 0x3f) << 24) | (((s) & 0xff) << 8) | ((f) & 0xff)))\n> +\n> +#define TZ_OWNER_SIP\t\t\t\t2\n> +#define TZ_SVC_BOOT\t\t\t\t1\n> +#define TZ_SVC_INFO\t\t\t\t6\n> +#define TZ_BOOT_CMD_KVM_MILESTONE\t\t0x21\n> +#define TZ_INFO_IS_SVC_AVAILABLE_CMD\t\t0x01\n> +\n> +#define TZ_CONFIGURE_MILESTONE_SERVICE_ID \\\n> +\tTZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_BOOT, TZ_BOOT_CMD_KVM_MILESTONE)\n> +#define TZ_CONFIGURE_MILESTONE_SERVICE_PARAM_ID\t\t0x23\n> +\n> +#define TZ_INFO_IS_SVC_AVAILABLE_ID \\\n> +\tTZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_INFO, TZ_INFO_IS_SVC_AVAILABLE_CMD)\n> +#define TZ_INFO_IS_SVC_AVAILABLE_ID_PARAM_ID\t\t0x1\n> +\n> +/* Hypervisor boot types */\n> +#define QCOM_HYP_BOOT_TYPE_GUNYAH\t\t0\n> +#define QCOM_HYP_BOOT_TYPE_KVM\t\t\t1\n> +\n> +/* TCR_EL2 bit field definitions */\n> +#define TCR_T0SZ_MASK\t\t\t\t0x1FUL\n> +#define TCR_PS_MASK\t\t\t\t(0x7UL << 32)\n> +#define TCR_PS_SHIFT\t\t\t\t16\n> +#define TCR_SH_ORGN_IRGN_MASK\t\t\t0x3F00UL\n> +#define TCR_SH_INNER_SHAREABLE\t\t\t(3UL << 12)\n> +#define TCR_ORGN_WRITE_BACK_ALLOC\t\tBIT(10)\n> +#define TCR_IRGN_WRITE_BACK_ALLOC\t\tBIT(8)\n> +\n>  #if IS_ENABLED(CONFIG_EFI_HAVE_CAPSULE_SUPPORT)\n>  void qcom_configure_capsule_updates(void);\n>  #else\n> -- \n> 2.34.1\n>","headers":{"Return-Path":"<u-boot-bounces@lists.denx.de>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=umDXoarn;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de\n (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de;\n envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org)","phobos.denx.de;\n dmarc=pass (p=quarantine dis=none) header.from=kernel.org","phobos.denx.de;\n spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de","phobos.denx.de;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.b=\"umDXoarn\";\n\tdkim-atps=neutral","phobos.denx.de; dmarc=pass (p=quarantine dis=none)\n header.from=kernel.org","phobos.denx.de;\n spf=pass smtp.mailfrom=sumit.garg@kernel.org"],"Received":["from phobos.denx.de (phobos.denx.de\n [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fzmvr4VgWz1yCv\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 20 Apr 2026 23:45:28 +1000 (AEST)","from h2850616.stratoserver.net (localhost [IPv6:::1])\n\tby phobos.denx.de (Postfix) with ESMTP id D7EE884198;\n\tMon, 20 Apr 2026 15:45:25 +0200 (CEST)","by phobos.denx.de (Postfix, from userid 109)\n id 1F23E84394; Mon, 20 Apr 2026 15:45:24 +0200 (CEST)","from sea.source.kernel.org (sea.source.kernel.org\n [IPv6:2600:3c0a:e001:78e:0:1991:8:25])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits))\n (No client certificate requested)\n by phobos.denx.de (Postfix) with ESMTPS id 150DD839D9\n for <u-boot@lists.denx.de>; Mon, 20 Apr 2026 15:45:21 +0200 (CEST)","from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58])\n by sea.source.kernel.org (Postfix) with ESMTP id 61B2540D52;\n Mon, 20 Apr 2026 13:45:19 +0000 (UTC)","by smtp.kernel.org (Postfix) with ESMTPSA id 7738EC19425;\n Mon, 20 Apr 2026 13:45:16 +0000 (UTC)"],"X-Spam-Checker-Version":"SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de","X-Spam-Level":"","X-Spam-Status":"No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,\n DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,\n RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham\n autolearn_force=no version=3.4.2","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n s=k20201202; t=1776692719;\n bh=YQQyoG6IgODNgnviNFcqI40vWAX6lXsK23iK132zC5U=;\n h=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n b=umDXoarnDr+XDhPuXzc0DGTAAx+pLIZJhUXTm+9tSEhQs5+7UjPscqCWTn9Xd4t+Y\n JOIFvkNx6phBNEavv1+3dBc9Ihr5t2HdDal9YLIiQqXnur2DKxlhnYTck39YBvZEQC\n 6Vq8PPD5mMMDabp3Cuv/dUHy1x+IHL1fsOYtrlMeO8b0ZER4c0Szq1g3PgJGv4Pe70\n y2FOdXQWleTsuhub/l9XsHeeegspOzKzoz+eNNaFFcs4mGjtqjbWa3pSFakcGi5rce\n T+R0aCpIp7+92z/dYjLNluYNJf0qAC2V5X7y66pkWyh721icFC+dRC2ci9yMtlQp0b\n 2K/Sg+NE1JdbA==","Date":"Mon, 20 Apr 2026 19:15:13 +0530","From":"Sumit Garg <sumit.garg@kernel.org>","To":"Aswin Murugan <aswin.murugan@oss.qualcomm.com>","Cc":"trini@konsulko.com, casey.connolly@linaro.org,\n neil.armstrong@linaro.org, sughosh.ganu@arm.com,\n gchan9527@gmail.com, u-boot-qcom@groups.io, u-boot@lists.denx.de","Subject":"Re: [PATCH v1] mach-snapdragon: Add KVM hypervisor support","Message-ID":"<aeYt6cz5AVXFc5m3@sumit-xelite>","References":"<20260419173829.1074404-1-aswin.murugan@oss.qualcomm.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<20260419173829.1074404-1-aswin.murugan@oss.qualcomm.com>","X-BeenThere":"u-boot@lists.denx.de","X-Mailman-Version":"2.1.39","Precedence":"list","List-Id":"U-Boot discussion <u-boot.lists.denx.de>","List-Unsubscribe":"<https://lists.denx.de/options/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=unsubscribe>","List-Archive":"<https://lists.denx.de/pipermail/u-boot/>","List-Post":"<mailto:u-boot@lists.denx.de>","List-Help":"<mailto:u-boot-request@lists.denx.de?subject=help>","List-Subscribe":"<https://lists.denx.de/listinfo/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=subscribe>","Errors-To":"u-boot-bounces@lists.denx.de","Sender":"\"U-Boot\" <u-boot-bounces@lists.denx.de>","X-Virus-Scanned":"clamav-milter 0.103.8 at phobos.denx.de","X-Virus-Status":"Clean"}},{"id":3680594,"web_url":"http://patchwork.ozlabs.org/comment/3680594/","msgid":"<ecb74cec-427f-47a3-9400-1c20f688d62c@quicinc.com>","list_archive_url":null,"date":"2026-04-22T09:13:44","subject":"Re: [PATCH v1] mach-snapdragon: Add KVM hypervisor support","submitter":{"id":90838,"url":"http://patchwork.ozlabs.org/api/people/90838/","name":"Pavan Kondeti","email":"pavan.kondeti@oss.qualcomm.com"},"content":"On Mon, Apr 20, 2026 at 07:15:13PM +0530, Sumit Garg wrote:\n> On Sun, Apr 19, 2026 at 11:08:29PM +0530, Aswin Murugan wrote:\n> > Enable Linux KVM virtualization on Snapdragon SoCs.\n> > \n> > Introduce CONFIG_QCOM_KVM_SUPPORT to select KVM or Gunyah\n> > hypervisor modes at build time.\n> > \n> > qcom-priv.h:\n> >  - Add TrustZone SMC interface definitions and parameter IDs\n> >  - Define hypervisor boot types (GUNYAH=0, KVM=1)\n> >  - Add TCR_EL2 bit field definitions for memory config\n> > \n> > board.c:\n> >  - Add qcom_configure_kvm_hypervisor() with EL-aware logic\n> >  - EL2: Perform direct SMC call for hypervisor setup\n> >  - EL1: Save context, disable caches, run SMC, restore state,\n> >    reconfigure TCR_EL2, re-enable caches\n> \n> Please don't switch EL1 -> EL2 in the middle of U-Boot execution which\n> just adds these expensive MMU operations during boot.\n> \n> Rather than that just follow the upstream edk2 example to switch from\n> EL1 -> EL2 on the first platform specific init code code sequence. Have\n> a look at this reference [1]. Surely you can keep the switch under a\n> config option. This will make U-Boot to properly execute either in EL1\n> or EL2.\n> \n> [1] https://github.com/tianocore/edk2-platforms/blob/master/Silicon/Qualcomm/KodiakPkg/Library/KodiakLib/KodiakHelper.S\n> \n\nThanks Sumit for pointing this out. In one of our implementation, we are doing \nthis EL1->EL2 switch as part of ExitBootServices(). As you mentioned in the commit\ndescription [1] , this seems one step closer to recommended boot flow.\n\nThanks,\nPavan\n\n[1]\nhttps://github.com/tianocore/edk2-platforms/commit/0a51cc11dd74be199c67eceabc7bf68d36bb7075","headers":{"Return-Path":"<u-boot-bounces@lists.denx.de>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.a=rsa-sha256\n header.s=qcppdkim1 header.b=dspuCLDI;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n header.a=rsa-sha256 header.s=google header.b=cPLmbBDj;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de\n (client-ip=85.214.62.61; helo=phobos.denx.de;\n envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org)","phobos.denx.de;\n dmarc=none (p=none dis=none) header.from=oss.qualcomm.com","phobos.denx.de;\n spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de","phobos.denx.de;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=qualcomm.com header.i=@qualcomm.com\n header.b=\"dspuCLDI\";\n\tdkim=pass (2048-bit key;\n unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n header.b=\"cPLmbBDj\";\n\tdkim-atps=neutral","phobos.denx.de; dmarc=none (p=none dis=none)\n header.from=oss.qualcomm.com","phobos.denx.de;\n spf=pass smtp.mailfrom=pavan.kondeti@oss.qualcomm.com"],"Received":["from phobos.denx.de (phobos.denx.de [85.214.62.61])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g0zFL460wz1y2d\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 22:34:46 +1000 (AEST)","from h2850616.stratoserver.net (localhost [IPv6:::1])\n\tby phobos.denx.de (Postfix) with ESMTP id AB02D8425F;\n\tWed, 22 Apr 2026 14:34:22 +0200 (CEST)","by phobos.denx.de (Postfix, from userid 109)\n id 3D9F6801A9; Wed, 22 Apr 2026 11:13:58 +0200 (CEST)","from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com\n [205.220.168.131])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits))\n (No client certificate requested)\n by phobos.denx.de (Postfix) with ESMTPS id A75368352B\n for <u-boot@lists.denx.de>; Wed, 22 Apr 2026 11:13:52 +0200 (CEST)","from pps.filterd (m0279863.ppops.net [127.0.0.1])\n by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n 63M5DaSj2123746\n for <u-boot@lists.denx.de>; Wed, 22 Apr 2026 09:13:50 GMT","from mail-pl1-f197.google.com (mail-pl1-f197.google.com\n [209.85.214.197])\n by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4dpenftnpr-1\n (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT)\n for <u-boot@lists.denx.de>; Wed, 22 Apr 2026 09:13:50 +0000 (GMT)","by mail-pl1-f197.google.com with SMTP id\n d9443c01a7336-2b2ec17dc21so59253405ad.2\n for <u-boot@lists.denx.de>; Wed, 22 Apr 2026 02:13:50 -0700 (PDT)","from hu-pkondeti-hyd.qualcomm.com ([202.46.22.19])\n by smtp.gmail.com with ESMTPSA id\n d9443c01a7336-2b5fab32cfasm202529745ad.69.2026.04.22.02.13.46\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Wed, 22 Apr 2026 02:13:48 -0700 (PDT)"],"X-Spam-Checker-Version":"SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de","X-Spam-Level":"","X-Spam-Status":"No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,\n DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED,\n SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.2","DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=\n cc:content-type:date:from:in-reply-to:message-id:mime-version\n :references:subject:to; s=qcppdkim1; bh=MBkQHtcYv20A9jLWkCZdQNAS\n R+a/WYDf1+/TEc5+2g4=; b=dspuCLDIR6FKaq2KcPkgnP3++X50HodXawEPCCFK\n 9HErw57rCjvwUZQfMKMYYPtD6djV/fuka9B5BeOQw7LNS+WTmB3JHewMjkYpYG1d\n 29RvBOsCKnoszOzODG+tu6pYltdDOPPg2/UWd2ylSEg78HtM4NtPFnHbp6BCe2/y\n CrNPaxxpefVtijNLlPBbJio9FL5ScSaALXJOshZ6qQHXe/vXRYVU5TJNl4Egi6Gq\n NIQPKa+bCl9vDsZ+dY/Ttw+cUDOeaJSxrsTUroshYy+xP1PWIQHy2yossVx4iINk\n MY192LtCvWeUVEltj1NaOzZEVTujHXXDlCjm28pzf2N/WQ==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=oss.qualcomm.com; s=google; t=1776849230; x=1777454030; darn=lists.denx.de;\n h=in-reply-to:content-disposition:mime-version:references:message-id\n :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to;\n bh=MBkQHtcYv20A9jLWkCZdQNASR+a/WYDf1+/TEc5+2g4=;\n b=cPLmbBDj/hXdxxLKJVu9Vziyou5WvVBU7ND9eRamtwB9SLEwVglwKBiFHHfqCjY2jh\n 64T0KLIcXmZRhcvoOmzdnaFgyRIhzKfjpGYRE6H/bFDJ1Gf6F1Uw15PkPEaqz8DwrF4E\n G3D4/3m/Njc5gqjWK2btDAMoydgnKRCcnfHHFJu6FZpFWJnFM9iL/UjQGFdLFytCaMHM\n yW6bTWAljIf5qsQmCRKw0l9akk8uaaL25flmCbVViaKLeOmT2GkeMNiDi5D0XK/Vw5Nr\n jgS3/dwG0umSTi1glWqIpA7tq2jUpLok1jCh1MXQmYn/DHXyaa7eHBceodp8MPYq6R/t\n FP0w=="],"X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776849230; x=1777454030;\n h=in-reply-to:content-disposition:mime-version:references:message-id\n :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc\n :subject:date:message-id:reply-to;\n bh=MBkQHtcYv20A9jLWkCZdQNASR+a/WYDf1+/TEc5+2g4=;\n b=DIhTgwhZLLBVyBpcSq0z+pwxxErDB3YW27pLi2DAGP8JMZ4CfpX+2PSBeW7Wf1Iv1I\n g18QYJCILwJcRo/3lyntTR1IiCLsCmKsmwtKU3StnUbT07MUalWUjoOMOav409s0YNOU\n 2cCzrg+2fqrWJHuXJ4BxNaBKFKL55/3aNsCFgLsxmNOxRLmrhO4nT99UJjufZglDp/1G\n MZp197bCjQ5SkOgqnFfeTXpxech6JaRa4ydN8FJy2docWtiLZdXlc+PiYPDCPemno8tt\n 7sjpyXsK5+4YCy3UdTVqA8VML6bmsb74n1kIEdIwo5bUUNGRJnCR5+T8C1us47aj162B\n CcKQ==","X-Forwarded-Encrypted":"i=1;\n AFNElJ86bMvQg/fZyiJxOP55EnTFl5xlfprFa1XkJ6fsHV3BJSvAvVY9/Lt5manilE0JNsb7cwbYjds=@lists.denx.de","X-Gm-Message-State":"AOJu0YzSKi3age9lliITudw6iHeiHYHaE8XGeXeXS38DaUUMl4M2yiyU\n V/jqgXVPAfq2ManswKM/erTOzufebwITtTXfJPN1VsFZIZo4ecRscmUYwa6ugTduxDSh/hZyTxj\n r+6GuOAI7mXqxuKrqN+SHOIkZ5Sv83uc4zGh2MGcnWj0GW377gLBzUayqdFnkfRhs","X-Gm-Gg":"AeBDieswHwZg7duw4lf50pk7U+Q/hI24kGNvIa96THarRedETd4XzbXp6IUW0hn5IWc\n SD/oQFwfY9AUhv1IbWMaj5c/ZqDeVeDyM6ZIkYwn21XClg79daJlmdMbwyA6DUPX61FkTCPjg/D\n M77ydA6PBUKcqn7+/wvngz91Sm8M1p7vtsLzF2TzxxpSDuElfFJbo1d/DA+EgyZyIQUaqmX88Qi\n GyJwMQq0E3SOx+9a4sDb/1bUN3cr+u6YGCCio9NBcnezvrO1IH1AYlGvMFmuCrtzPzIiEfnY7kd\n UPsKeIQ9cJMrJJhq9B/Hsxi1hOWtXXw0dtv6olHEJzrjO2rlI0+Zo+toF7z/Cxn2APFDTJuvXTo\n Vin8Ns/zKQN/uuTsTtowHXPqx+8uxoxotbH4Ckc/ND3qjD8lFHlJwMEJLUXPk4dUclw==","X-Received":["by 2002:a17:903:1b6f:b0:2b2:4d08:9e02 with SMTP id\n d9443c01a7336-2b5f9f3c677mr218390675ad.21.1776849229738;\n Wed, 22 Apr 2026 02:13:49 -0700 (PDT)","by 2002:a17:903:1b6f:b0:2b2:4d08:9e02 with SMTP id\n d9443c01a7336-2b5f9f3c677mr218390405ad.21.1776849229250;\n Wed, 22 Apr 2026 02:13:49 -0700 (PDT)"],"Date":"Wed, 22 Apr 2026 14:43:44 +0530","From":"Pavan Kondeti <pavan.kondeti@oss.qualcomm.com>","To":"Sumit Garg <sumit.garg@kernel.org>","Cc":"Aswin Murugan <aswin.murugan@oss.qualcomm.com>, trini@konsulko.com,\n casey.connolly@linaro.org, neil.armstrong@linaro.org,\n sughosh.ganu@arm.com, gchan9527@gmail.com, u-boot-qcom@groups.io,\n u-boot@lists.denx.de","Subject":"Re: [PATCH v1] mach-snapdragon: Add KVM hypervisor support","Message-ID":"<ecb74cec-427f-47a3-9400-1c20f688d62c@quicinc.com>","References":"<20260419173829.1074404-1-aswin.murugan@oss.qualcomm.com>\n <aeYt6cz5AVXFc5m3@sumit-xelite>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<aeYt6cz5AVXFc5m3@sumit-xelite>","X-Authority-Analysis":"v=2.4 cv=OdioyBTY c=1 sm=1 tr=0 ts=69e8914e cx=c_pps\n a=cmESyDAEBpBGqyK7t0alAg==:117 a=fChuTYTh2wq5r3m49p7fHw==:17\n a=kj9zAlcOel0A:10 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10\n a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22\n a=kJSeNkqSAAAA:20 a=NEAV23lmAAAA:8 a=1jvfx5lmMrNINu_u-F4A:9 a=CjuIK1q_8ugA:10\n a=1OuFwYUASf3TG4hYMiVC:22 a=bA3UWDv6hWIuX7UZL3qL:22","X-Proofpoint-ORIG-GUID":"qhU5e0JaZrNfGQidhBPYnrDG2leHH6_h","X-Proofpoint-GUID":"qhU5e0JaZrNfGQidhBPYnrDG2leHH6_h","X-Proofpoint-Spam-Details-Enc":"AW1haW4tMjYwNDIyMDA4MyBTYWx0ZWRfXz6Gr88BfxCy5\n p4U9DHNx0UIHllPpsueAIBx2f0S9ZQ+8h0NJVnVL7u3OH7AO8wy0WhoK35jQKvou13w1C/zsg/y\n yoIzRZUHIVe0va7dvYWaaPoS/QF79BSWgvpXyBdC268P7zI0zwYI5N7ej6kU7WTJ6SYp/IG22gl\n xWJk3f1QH/QyJDqgZYcD9YcTRxfNJPYq9UmZ/X8oMXkTvmWBqSR90R4Wj5tk2ZpwAYgkiWikso2\n QAZt7UdHdYWYQGLCp18CldkvT93WrIHnAfZpJaYrw/XQEMU6yA1RU3S67Ivezq17oGTGG8fsIBn\n RaNHQaepzl6Peg1L4DD7/ffdTg75ysHZSp6FavXDUnb1wrXUHEDoEdIMOFCENohuIejH3e7fkIE\n cN9vEn24m6AUipHUo3pVaY1OdywPlATDt+7FlW4ur+Ohf1Ei/YLBxkg9xwLKrf6mDN11Mhp7hMJ\n 4qZeJnPLmbbhpRBaY0w==","X-Proofpoint-Virus-Version":"vendor=baseguard\n engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49\n definitions=2026-04-21_03,2026-04-21_02,2025-10-01_01","X-Proofpoint-Spam-Details":"rule=outbound_notspam policy=outbound score=0\n spamscore=0 impostorscore=0 malwarescore=0 phishscore=0 adultscore=0\n clxscore=1011 priorityscore=1501 bulkscore=0 lowpriorityscore=0\n suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc=\n route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604200000\n definitions=main-2604220083","X-Mailman-Approved-At":"Wed, 22 Apr 2026 14:34:21 +0200","X-BeenThere":"u-boot@lists.denx.de","X-Mailman-Version":"2.1.39","Precedence":"list","List-Id":"U-Boot discussion <u-boot.lists.denx.de>","List-Unsubscribe":"<https://lists.denx.de/options/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=unsubscribe>","List-Archive":"<https://lists.denx.de/pipermail/u-boot/>","List-Post":"<mailto:u-boot@lists.denx.de>","List-Help":"<mailto:u-boot-request@lists.denx.de?subject=help>","List-Subscribe":"<https://lists.denx.de/listinfo/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=subscribe>","Errors-To":"u-boot-bounces@lists.denx.de","Sender":"\"U-Boot\" <u-boot-bounces@lists.denx.de>","X-Virus-Scanned":"clamav-milter 0.103.8 at phobos.denx.de","X-Virus-Status":"Clean"}}]