From nobody Mon Sep 26 07:04:45 2022 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4MbYfP4Q2hz4d7qG; Mon, 26 Sep 2022 07:04:45 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4MbYfP3ytrz3FpH; Mon, 26 Sep 2022 07:04:45 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1664175885; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=FyJxRu+GSdUFhPVkn51NvywVtcJtQwLd4SZ+T3OrPr8=; b=gEnzRisPfsYn4p5UXbgvc+MkXgCHsApiYazzZSamwlzUefDVa6HNMlvi2JXKGD612BJxJo gbSC02mLKCQq8Hf33J9ybMz3GDyIt54AZuhivlMv/HcUrXuVRRhVA2tUpTdFUQH+y5NYDE cdlafmX0V4whrpNQ69jyrYv4fOSmWVbCvw3xHEq+yFnu5/EyyQ8OVPiiJKYLey1WR5J2Pz pQJSGjnalgvytz4yZEOiQTQYdBmb3sx6CvRPXl8XYgpuqvkNRxNwbWCy9IDiQzdmyz/Wv3 3md3jAVSMkzZEBlv/Lx2hjuajqZDSzyelFAE8ELult39/sIu9MSeQ8u1Wiw2kw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4MbYfP2vt8zhFQ; Mon, 26 Sep 2022 07:04:45 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 28Q74jp8011235; Mon, 26 Sep 2022 07:04:45 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 28Q74jZA011234; Mon, 26 Sep 2022 07:04:45 GMT (envelope-from git) Date: Mon, 26 Sep 2022 07:04:45 GMT Message-Id: <202209260704.28Q74jZA011234@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Wei Hu Subject: git: 7a58bf04433f - main - arm64: Enabling new hypercalls using HvCallSetVpRegisters and HvCallGetVpRegisters List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: whu X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 7a58bf04433f711e1db6b2c263d8d07c7fd0819b Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1664175885; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=FyJxRu+GSdUFhPVkn51NvywVtcJtQwLd4SZ+T3OrPr8=; b=p8+0LfWIBboLAzE81hdcbrKoiNojnfFbmnCRHruX0eMQQ4BJskEH/rBleNhcdWmtWi/zaG gefgVUeeSNtDNklzbcfmL4hDaNuqQbsl/1HmKkO5Lqkb3ruJdIiBqIUkMnAHEY+n/s6IHT NJUd5LtVqbsK74NmOXL2l3YvAlu4LyXn6Ye4pxJgVp4TbB46N+mZaoCnSVMVsJ6qyYm1+c Hn2lHCZBgtBcMOvqaDxEM1ayH6KCQsyetWXvfxyp5EefyWXNl3rcZoYer8gc47ZcZxOFGt F7qiaZmlXiXQWgN+l1CsfOfH2MgbfXDXdzEMbRpuoISI1ustWerzw3Ol2c8zhw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1664175885; a=rsa-sha256; cv=none; b=coNeNCQYq334K0BRcm8DuincmuwNV7t1tCldx20bWcCRdDcm5pXmE+/7ZTexS5EsdPM0SH 6ZIJsTihmQ/wsExOuUR4bSjhcRmrq0bZl7PJmRV4CAAQXw+2nnSHlTq3QZd7B7UOkKG9lT GdqCbc2off4zi9AiVR05BuTk6UldGn0LhvdTM96fByr+EVgRcFMh4AtPyOX+KArYKMEipF +Khsy9nfpTLi833jJghlqDM9tlKY7iVecoWWQhWmHgD1S733wog9nyauNFaDy2wj5Jk5r3 L1C3/KY+UHL1U2HogZQ8Xk8ucoEsl+HmdwEZ7b0ZHOldc10McuOarfm/eCvmQw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by whu: URL: https://cgit.FreeBSD.org/src/commit/?id=7a58bf04433f711e1db6b2c263d8d07c7fd0819b commit 7a58bf04433f711e1db6b2c263d8d07c7fd0819b Author: Wei Hu AuthorDate: 2022-09-26 06:30:37 +0000 Commit: Wei Hu CommitDate: 2022-09-26 06:30:37 +0000 arm64: Enabling new hypercalls using HvCallSetVpRegisters and HvCallGetVpRegisters Enabling HvCallSetVpRegisters and HvCallGetVpRegisters for hypercalls to read and write to specific MSRs. This is required for implementing wrmsr and rdmsr, which is required for Hyper-V vmbus driver for ARM64. Also we need to use arm smccc hvc 1.2 version as we need to access registers beyond X0-X3 for HvCallGetVpRegisters. Currently scoping it only for Hyper-V. Reviewed by: lwhsu, andrew, whu Tested by: Souradeep Chakrabarti Signed-off-by: Souradeep Chakrabarti Sponsored by: Microsoft Differential Revision: https://reviews.freebsd.org/D36256 --- sys/dev/psci/smccc.h | 25 +++++++++++++++++++++++++ sys/dev/psci/smccc_arm64.S | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/sys/dev/psci/smccc.h b/sys/dev/psci/smccc.h index 6bb4dbcf7076..4dc4c089df65 100644 --- a/sys/dev/psci/smccc.h +++ b/sys/dev/psci/smccc.h @@ -91,4 +91,29 @@ int arm_smccc_smc(register_t, register_t, register_t, register_t, register_t, int arm_smccc_hvc(register_t, register_t, register_t, register_t, register_t, register_t, register_t, register_t, struct arm_smccc_res *res); +struct arm_smccc_1_2_regs { + register_t a0; + register_t a1; + register_t a2; + register_t a3; + register_t a4; + register_t a5; + register_t a6; + register_t a7; + register_t a8; + register_t a9; + register_t a10; + register_t a11; + register_t a12; + register_t a13; + register_t a14; + register_t a15; + register_t a16; + register_t a17; +}; + +int arm_smccc_1_2_hvc(const struct arm_smccc_1_2_regs *args, + struct arm_smccc_1_2_regs *res); +int arm_smccc_1_2_smc(const struct arm_smccc_1_2_regs *args, + struct arm_smccc_1_2_regs *res); #endif /* _PSCI_SMCCC_H_ */ diff --git a/sys/dev/psci/smccc_arm64.S b/sys/dev/psci/smccc_arm64.S index ba10f7493e71..41e602563222 100644 --- a/sys/dev/psci/smccc_arm64.S +++ b/sys/dev/psci/smccc_arm64.S @@ -51,3 +51,38 @@ END(arm_smccc_\insn) */ arm_smccc_1_0 hvc arm_smccc_1_0 smc + +.macro arm_smccc_1_2 insn +ENTRY(arm_smccc_1_2_\insn) + stp x1, x19, [sp, #-16]! + mov x19, x0 + ldp x0, x1, [x19, #16 * 0] + ldp x2, x3, [x19, #16 * 1] + ldp x4, x5, [x19, #16 * 2] + ldp x6, x7, [x19, #16 * 3] + ldp x8, x9, [x19, #16 * 4] + ldp x10, x11, [x19, #16 * 5] + ldp x12, x13, [x19, #16 * 6] + ldp x14, x15, [x19, #16 * 7] + ldp x16, x17, [x19, #16 * 8] + \insn #0 + ldr x19, [sp] + cbz x19, 1f + stp x0, x1, [x19, #16 * 0] + stp x2, x3, [x19, #16 * 1] + stp x4, x5, [x19, #16 * 2] + stp x6, x7, [x19, #16 * 3] + stp x8, x9, [x19, #16 * 4] + stp x10, x11, [x19, #16 * 5] + stp x12, x13, [x19, #16 * 6] + stp x14, x15, [x19, #16 * 7] + stp x16, x17, [x19, #16 * 8] + ldp xzr, x19, [sp], #16 +1: ret +END(arm_smccc_1_2\insn) +.endm +/* int arm_smccc_1_2_*(const struct arm_smccc_1_2_regs *args, + * struct arm_smccc_1_2_regs *res) + */ +arm_smccc_1_2 hvc +arm_smccc_1_2 smc