get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/2224932/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2224932,
    "url": "http://patchwork.ozlabs.org/api/patches/2224932/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/uboot/patch/20260419173829.1074404-1-aswin.murugan@oss.qualcomm.com/",
    "project": {
        "id": 18,
        "url": "http://patchwork.ozlabs.org/api/projects/18/?format=api",
        "name": "U-Boot",
        "link_name": "uboot",
        "list_id": "u-boot.lists.denx.de",
        "list_email": "u-boot@lists.denx.de",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null,
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20260419173829.1074404-1-aswin.murugan@oss.qualcomm.com>",
    "list_archive_url": null,
    "date": "2026-04-19T17:38:29",
    "name": "[v1] mach-snapdragon: Add KVM hypervisor support",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": false,
    "hash": "ae96cb809a27e74dde7addfe87c640577befe93c",
    "submitter": {
        "id": 90811,
        "url": "http://patchwork.ozlabs.org/api/people/90811/?format=api",
        "name": "Aswin Murugan",
        "email": "aswin.murugan@oss.qualcomm.com"
    },
    "delegate": {
        "id": 84350,
        "url": "http://patchwork.ozlabs.org/api/users/84350/?format=api",
        "username": "narmstrong",
        "first_name": "Neil",
        "last_name": "Armstrong",
        "email": "narmstrong@baylibre.com"
    },
    "mbox": "http://patchwork.ozlabs.org/project/uboot/patch/20260419173829.1074404-1-aswin.murugan@oss.qualcomm.com/mbox/",
    "series": [
        {
            "id": 500521,
            "url": "http://patchwork.ozlabs.org/api/series/500521/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/uboot/list/?series=500521",
            "date": "2026-04-19T17:38:29",
            "name": "[v1] mach-snapdragon: Add KVM hypervisor support",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/500521/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2224932/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2224932/checks/",
    "tags": {},
    "related": [],
    "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=nqw7/hmn;\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=UX3vA+9l;\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=\"nqw7/hmn\";\n\tdkim=pass (2048-bit key;\n unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n header.b=\"UX3vA+9l\";\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=aswin.murugan@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 4fzG7s5KXPz1yGt\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 20 Apr 2026 03:39:05 +1000 (AEST)",
            "from h2850616.stratoserver.net (localhost [IPv6:::1])\n\tby phobos.denx.de (Postfix) with ESMTP id F2D7183E81;\n\tSun, 19 Apr 2026 19:38:56 +0200 (CEST)",
            "by phobos.denx.de (Postfix, from userid 109)\n id DEE8884181; Sun, 19 Apr 2026 19:38:55 +0200 (CEST)",
            "from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com\n [205.220.180.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 B0E7A839D9\n for <u-boot@lists.denx.de>; Sun, 19 Apr 2026 19:38:52 +0200 (CEST)",
            "from pps.filterd (m0279869.ppops.net [127.0.0.1])\n by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n 63JGCU1n2107176\n for <u-boot@lists.denx.de>; Sun, 19 Apr 2026 17:38:51 GMT",
            "from mail-pf1-f197.google.com (mail-pf1-f197.google.com\n [209.85.210.197])\n by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4dm0y632vh-1\n (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT)\n for <u-boot@lists.denx.de>; Sun, 19 Apr 2026 17:38:50 +0000 (GMT)",
            "by mail-pf1-f197.google.com with SMTP id\n d2e1a72fcca58-82f7bec24fdso1390456b3a.2\n for <u-boot@lists.denx.de>; Sun, 19 Apr 2026 10:38:50 -0700 (PDT)",
            "from hu-aswinm-blr.qualcomm.com\n (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com. [103.229.18.19])\n by smtp.gmail.com with ESMTPSA id\n d2e1a72fcca58-82f97eb5ce8sm6020070b3a.61.2026.04.19.10.38.45\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Sun, 19 Apr 2026 10:38: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 RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_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 content-transfer-encoding:date:from:message-id:mime-version\n :subject:to; s=qcppdkim1; bh=4r5zEIU/dXPfFFQqEgbH8fxAnczLuX4G31A\n z5P/PXuU=; b=nqw7/hmnLp8v7G3SKRuwfIqSKc4qyrZ8lHhYrWYWtcaZ6WYwz9o\n 8xE6Y67LinKt7/didIDy0DA0QFkWz6fVm7T9deVUJaEk3kFGeRtoB0hK0BKEJUSH\n 0KGsVRJkIMw5xpbToKo2ITskZZlIZRByIc2Ns6qkZbad08uA+hsdRGpEUQL3XMuj\n j+cUQbWXEDmj7NtAuTtzKbk35YYL1Af0Hb8unmtrzFSN22FRrIc8ecTjpZwP2IiT\n UUj0q2gvIr+MiqoHXBUu0FfU7sz85SV2RAm3z5Ei/eJzgWObeBVG1RSuueMsBYve\n e3toQkwLos2ZTuE9i4RVdinqfGDo1bWKFgg==",
            "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=oss.qualcomm.com; s=google; t=1776620330; x=1777225130; darn=lists.denx.de;\n h=content-transfer-encoding:mime-version:message-id:date:subject:to\n :from:from:to:cc:subject:date:message-id:reply-to;\n bh=4r5zEIU/dXPfFFQqEgbH8fxAnczLuX4G31Az5P/PXuU=;\n b=UX3vA+9lC2T2TYnpL8fwWNxNYSbYLeDo0qEXGI/r3G4F9sAQ/vhvA5IOX6f/yC+Ym1\n lRRm30kDC1sn7PrJaKcPGOJjY1+KKEu1YZNUFTzRklZPy7GMzVLwMVPliSfio9fPAkAi\n wn+StQKXW6q5NatBKxDKaajuKQ/cP+x6oE3pDsG1RdLiRmtS9QF2o8Tke6zlzj6Y9YXP\n 6SKr9//cLchoFtgjLFn+aPpAFRuSeW2cdJoy28IaSkILYtiGQvS82OfBM5Sn7wnAB4KL\n aRYvNejgHQyblx2EtKZjS8NZz+gdskCwwkE0sM1udCP4WQpiY1JZ3CcQtwRLCdjTquXc\n Uwkg=="
        ],
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776620330; x=1777225130;\n h=content-transfer-encoding:mime-version:message-id:date:subject:to\n :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id\n :reply-to;\n bh=4r5zEIU/dXPfFFQqEgbH8fxAnczLuX4G31Az5P/PXuU=;\n b=ngymTdrL/36i+9EpECf2OLbS8bjGPgfZMr9N2gQ19MNWcRoYatpe1P92jjpvWZJk+B\n ORYWCC56Afga6j9JbeHXd1x9DwflZTrhenjH73X+13xeSw+QB0BRyT6Mch93/EC86UQ3\n 2HO58atoEvx3Rr5acKjF9yyDHXyQ5OBMi4mWzcekMAnSZo5bohuQlSxpwiKcTrodJWQm\n WvLylMb4PkK5VBIrkul86Cd4FbhoV2Ns8OWvLGTGHUfroWwjj7rtzVT4MeIjMo0eEWNl\n GaJSvsbwcMwncbRPzjWnpJjLLkbrPI6cJveMCxPUHYqFeNhic+SK3IdUe5Vc0zDFkTHC\n W04Q==",
        "X-Forwarded-Encrypted": "i=1;\n AFNElJ8V+ZpSl04V++WBqHo7yGJQrlKjHDjm8STjzR08QqlqyH01dbJA8MT84tnOWxisAzljxFzluro=@lists.denx.de",
        "X-Gm-Message-State": "AOJu0YxEv9p/R4l8379leAfo6RYPmetyX310pudL8RtbA7nE3Job9HtD\n HEjcyapm6TcelF2daWCstBl4HAvOWUzvzb21oUMSG90cXMokI5vAIgIuuUbRyPl0cLyW2f3YVba\n v8ypogKKtCLARa67SOAA+YxJruWnjPuAY9ol285LjK6O3Jv96x2WI7u9u",
        "X-Gm-Gg": "AeBDieuXgG1luC0huaQHIUnw0GRptOLs2zSW+AilHIvR1h86+7TPym9TEsRbshyLztt\n rwJIH9eVT4xRYe73U6bpQOQ3mKpvB7osPpkbHLS4n10x4ECcHphVSUgly9HjxZd8P4shIRN5vLU\n 5oAUnESpK5HuYPv/pS+8XLRDJGuSTSUOqMyYf3tOZEI+0vBMLhCDwnRT7gu0cGr4BTLP5V5LgeG\n +XE0VLD3Upvfoxuk8QrKJ/C7xLXUlPrWDMIMHmbYYb6l13FVmLwQEA/mo910trX5BnCjd/swYnz\n DiFrpQ/vzw/s7Yc/X87rBztVTwZroJqQ01a09KNZiAxBATPwSQ+e4oet4Y5eHEnhjoa0sX/2xrz\n vQmuNbTEoPFJzd6NApjd8iqkvcRowwT8YtOWEhjlLCTVH502hwAlSbD9iRrJaygBXg2DnR1HZ93\n QF226h7T9g4EZ8NvXKwE8IPOrzik6X8C06U0svvTWJ8qBHFZTU3mo=",
        "X-Received": [
            "by 2002:a05:6a00:4214:b0:81f:3fbd:ccf with SMTP id\n d2e1a72fcca58-82f8c8bcc27mr9943627b3a.23.1776620329829;\n Sun, 19 Apr 2026 10:38:49 -0700 (PDT)",
            "by 2002:a05:6a00:4214:b0:81f:3fbd:ccf with SMTP id\n d2e1a72fcca58-82f8c8bcc27mr9943610b3a.23.1776620329320;\n Sun, 19 Apr 2026 10:38:49 -0700 (PDT)"
        ],
        "From": "Aswin Murugan <aswin.murugan@oss.qualcomm.com>",
        "To": "trini@konsulko.com, casey.connolly@linaro.org, neil.armstrong@linaro.org,\n sumit.garg@kernel.org, aswin.murugan@oss.qualcomm.com,\n sughosh.ganu@arm.com, gchan9527@gmail.com, u-boot-qcom@groups.io,\n u-boot@lists.denx.de",
        "Subject": "[PATCH v1] mach-snapdragon: Add KVM hypervisor support",
        "Date": "Sun, 19 Apr 2026 23:08:29 +0530",
        "Message-Id": "<20260419173829.1074404-1-aswin.murugan@oss.qualcomm.com>",
        "X-Mailer": "git-send-email 2.34.1",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "X-Proofpoint-ORIG-GUID": "AtxXdBqCXyXLy9p0SutJyOmb8votIZt4",
        "X-Authority-Analysis": "v=2.4 cv=Fpo1OWrq c=1 sm=1 tr=0 ts=69e5132a cx=c_pps\n a=rEQLjTOiSrHUhVqRoksmgQ==:117 a=Ou0eQOY4+eZoSc0qltEV5Q==:17\n a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22\n a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=EUspDBNiAAAA:8\n a=v8_0fD8sVwdknlzlMUYA:9 a=2VI0MkxyNR6bbpdq8BZq:22",
        "X-Proofpoint-GUID": "AtxXdBqCXyXLy9p0SutJyOmb8votIZt4",
        "X-Proofpoint-Spam-Details-Enc": "AW1haW4tMjYwNDE5MDE4OCBTYWx0ZWRfXzSYoMWxffcpN\n SYffe2VhJHgzImDCno6S5ual6LW+uV/UbuihllLZnOOc2saRXWc4qWE2ZOmS1D+6vDHuVS3se1f\n 3UmnQFnvDxac3GvPnYtQliHdUW2a+z5Fg8y1ciOUwktIgiMwcrmTN2GKEHzzlzFPhxBkAPMOj3u\n srXTqxpKZmhi3yEVd8fCYhu8q1E5JIu5Wz9Ix6Osd17g0Nap5VdLvknhUDeaU2tR3vS+P0Q1YS4\n l3H4Am1pD5YNR33JwAnEmMK+G4f+JiUG0N9n8RdHPtKdqAPp/qc/eZXoWBQWAhPBmMym7so5h+F\n UqaJ7yic6+wqjk7nDzh1ukgGy23bCq4fdZQOMnemvMnp3ypj1bVcqN9le3h2dCUUCzkSwKwaReI\n RDJbSpYY0vo8bzSTkdcfWYFQmnW8zk4weGTCTgScvARkKgwHe6LyG2SaqFfYCHDDxCi4YPjQxEy\n mUQkRJhN+KeSji2Fxng==",
        "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-19_05,2026-04-17_04,2025-10-01_01",
        "X-Proofpoint-Spam-Details": "rule=outbound_notspam policy=outbound score=0\n impostorscore=0 phishscore=0 suspectscore=0 lowpriorityscore=0 bulkscore=0\n priorityscore=1501 clxscore=1015 adultscore=0 spamscore=0 malwarescore=0\n classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0\n reason=mlx scancount=1 engine=8.22.0-2604070000 definitions=main-2604190188",
        "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"
    },
    "content": "Enable Linux KVM virtualization on Snapdragon SoCs.\n\nIntroduce CONFIG_QCOM_KVM_SUPPORT to select KVM or Gunyah\nhypervisor modes at build time.\n\nqcom-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\nboard.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\nDefault mode remains Gunyah. Enable CONFIG_QCOM_KVM_SUPPORT to\nselect KVM for Linux.\n\nSigned-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(+)",
    "diff": "diff --git a/arch/arm/mach-snapdragon/Kconfig b/arch/arm/mach-snapdragon/Kconfig\nindex 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\ndiff --git a/arch/arm/mach-snapdragon/board.c b/arch/arm/mach-snapdragon/board.c\nindex 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\narch/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 \ndiff --git a/arch/arm/mach-snapdragon/qcom-priv.h b/arch/arm/mach-snapdragon/qcom-priv.h\nindex 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",
    "prefixes": [
        "v1"
    ]
}