From nobody Fri Aug 18 07:41:51 2023 X-Original-To: dev-commits-src-branches@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 4RRv2m1Y7mz4qrLc; Fri, 18 Aug 2023 07:41:52 +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 4RRv2l40gfz3GMg; Fri, 18 Aug 2023 07:41:51 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1692344511; 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=1mLJ5QA3CNtmW8X5IBB+lWX2j0pSJdB4jQc+2SQMhX8=; b=X7N6xr7Nrd14qgLP/3jzqikmEqcKmbyBecYeOZpL6F8phk6Ncoq137PP3J6WcYxgghuNs1 UpKIHAjV+Y+Mc+YXAalD+l2GpWQcBwE+NmDVmvgHhaBHHAfbfPeaDT6Mv+glU14SeHbh2x z1zmQkSBGGmhNpIGCLOyQbh6ixcBg4LWBwze+gtj7jStHT89bNxn9psaasVtncFdsViIWf /oiz4zkGi5HqDQg+vf0XaAt1aFqmeaFmZH2UBAa7ofzeDtsLRETZ5pailFMr9VvkDGNR0e MohG6QwKI9dYSyJfTf6oZD//qiA3YWDSQq6vevDpnbIWba9QQvdn7Q4+nfvnzw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1692344511; 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=1mLJ5QA3CNtmW8X5IBB+lWX2j0pSJdB4jQc+2SQMhX8=; b=uB35uZRLB4X7w3ytd//6tt109ei3zUBCDqH+oTQQ8g/G3LKyyIuiz5GCJGAtx48by+2boT lv0LrIdZQVi4+cphiJYjKmKOrahp//b36fskB1TuUqGXgZPT9fytm4CwEZkyPY2skEvo1n zQIXCc5kc7nvy+zZYSchUnDpCBjFb1/IJZSwIraBBgdGhQ1UxqE8C47AXZOogfMTIXvs4x Tjf0uru5A+5GrWQOqBDB4qz5F//ZmYrDOENPLZhc+m/jgx/84CPThBC0lKVwqRzEZhg7yD 0ISW9ZimJDn1x4CnEORH4vRKFtkxdqd+/c5q5eGmr3wcFjDcKb4/yH/65Li4bQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1692344511; a=rsa-sha256; cv=none; b=Eu1tchNMrtpuJWYhaoCO0/HPO5zl1PPYaosQWaC0589tWjcMjLWoXBxMzuONMxqigfyslo gJSdCfY4xl5UqKnwJO+ewjr7mUFwmje6BLyL2ryT4UL5MVDGMO8NNnbLAjVNTLax7iVAY0 HIBEKVWAfN2zpafEPlWXmYfdruxvoOgFTNBaWeDqLiPhIBkR8MqfbPDp0efQTbnfE89VTH 1CN4ErWkmMjmh/ACxzIGusRcE99G9lMy+K2LzI3EZTnQWGkF9yAMavPmr3gS9uZAgIvPHa tGPSBH2V/W/t+SwPxkz+P6uf77PlFVM/Cdj8K24dh9xuS4AQemlcuAPdKqLQog== ARC-Authentication-Results: i=1; mx1.freebsd.org; none 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 4RRv2l2mDtz179M; Fri, 18 Aug 2023 07:41:51 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 37I7fpSv066884; Fri, 18 Aug 2023 07:41:51 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 37I7fp9S066881; Fri, 18 Aug 2023 07:41:51 GMT (envelope-from git) Date: Fri, 18 Aug 2023 07:41:51 GMT Message-Id: <202308180741.37I7fp9S066881@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Corvin =?utf-8?Q?K=C3=B6hne?= Subject: git: b260e413b4b7 - stable/13 - bhyve: read OpRegion address and size for GVT-d List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: corvink X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: b260e413b4b7053e4c7a4521e4e9823bb01515be Auto-Submitted: auto-generated The branch stable/13 has been updated by corvink: URL: https://cgit.FreeBSD.org/src/commit/?id=b260e413b4b7053e4c7a4521e4e9823bb01515be commit b260e413b4b7053e4c7a4521e4e9823bb01515be Author: Corvin Köhne AuthorDate: 2023-05-10 11:38:02 +0000 Commit: Corvin Köhne CommitDate: 2023-08-18 07:32:07 +0000 bhyve: read OpRegion address and size for GVT-d The OpRegion provides some configuration bits and ACPI methods used by some Intel drivers. The guest needs access to it. In the first step, we're reading it's address and size. Reviewed by: jhb MFC after: 1 week Sponsored by: Beckhoff Automation GmbH & Co. KG Differential Revision: https://reviews.freebsd.org/D40040 (cherry picked from commit 6952b9d25e18fd3a4bf0d1bb7d6b44ff6edf6737) --- usr.sbin/bhyve/pci_gvt-d.c | 67 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/usr.sbin/bhyve/pci_gvt-d.c b/usr.sbin/bhyve/pci_gvt-d.c index 3109bc06be82..fd3b48c3e5b7 100644 --- a/usr.sbin/bhyve/pci_gvt-d.c +++ b/usr.sbin/bhyve/pci_gvt-d.c @@ -6,12 +6,16 @@ */ #include +#include #include #include #include #include +#include +#include +#include #include "e820.h" #include "pci_gvt-d-opregion.h" @@ -21,14 +25,20 @@ #define MB (1024 * KB) #define GB (1024 * MB) +#ifndef _PATH_MEM +#define _PATH_MEM "/dev/mem" +#endif + #define PCI_VENDOR_INTEL 0x8086 -#define PCIR_BDSM 0x5C /* Base of Data Stolen Memory register */ +#define PCIR_BDSM 0x5C /* Base of Data Stolen Memory register */ +#define PCIR_ASLS_CTL 0xFC /* Opregion start address register */ #define PCIM_BDSM_GSM_ALIGNMENT \ 0x00100000 /* Graphics Stolen Memory is 1 MB aligned */ #define GVT_D_MAP_GSM 0 +#define GVT_D_MAP_OPREGION 1 static int gvt_d_probe(struct pci_devinst *const pi) @@ -167,6 +177,56 @@ gvt_d_setup_gsm(struct pci_devinst *const pi) passthru_cfgwrite_emulate)); } +static int +gvt_d_setup_opregion(struct pci_devinst *const pi) +{ + struct passthru_softc *sc; + struct passthru_mmio_mapping *opregion; + struct igd_opregion_header *header; + uint64_t asls; + int memfd; + + sc = pi->pi_arg; + + memfd = open(_PATH_MEM, O_RDONLY, 0); + if (memfd < 0) { + warn("%s: Failed to open %s", __func__, _PATH_MEM); + return (-1); + } + + opregion = passthru_get_mmio(sc, GVT_D_MAP_OPREGION); + if (opregion == NULL) { + warnx("%s: Unable to access opregion", __func__); + close(memfd); + return (-1); + } + + asls = read_config(passthru_get_sel(sc), PCIR_ASLS_CTL, 4); + + header = mmap(NULL, sizeof(*header), PROT_READ, MAP_SHARED, memfd, + asls); + if (header == MAP_FAILED) { + warn("%s: Unable to map OpRegion header", __func__); + close(memfd); + return (-1); + } + if (memcmp(header->sign, IGD_OPREGION_HEADER_SIGN, + sizeof(header->sign)) != 0) { + warnx("%s: Invalid OpRegion signature", __func__); + munmap(header, sizeof(*header)); + close(memfd); + return (-1); + } + + opregion->hpa = asls; + opregion->len = header->size * KB; + munmap(header, sizeof(header)); + + close(memfd); + + return (0); +} + static int gvt_d_init(struct pci_devinst *const pi, nvlist_t *const nvl __unused) { @@ -177,6 +237,11 @@ gvt_d_init(struct pci_devinst *const pi, nvlist_t *const nvl __unused) goto done; } + if ((error = gvt_d_setup_opregion(pi)) != 0) { + warnx("%s: Unable to setup OpRegion", __func__); + goto done; + } + done: return (error); }