From nobody Fri Aug 18 07:41:44 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 4RRv2c71bhz4qrLK; Fri, 18 Aug 2023 07:41:44 +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 4RRv2c5XVMz3Fsf; Fri, 18 Aug 2023 07:41:44 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1692344504; 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=kiIxTNFiyYKiY4M6bICBw6Q1YQVl0kBZdDD+VE4CJt8=; b=ZY320oydF3Pq47gojvMGuJbk9ZFwc+EQzlKTxCYZfPmSqjsO9kRmvNMdHgqMsuJGeCmF1g 68RtudJZjoSJxdDXC5e2G0lgpbWhoZr3yhclGJom/Fc7KZ8/Hbh+RTrIo6kR0VUX0imy0k VsYGY1TWQPl4fzD9ZauxBN+sk7cDFgPly+d3nAOhl/3Y60XyGJ3mxhYQc2oGyI7xJ3hxLR yR8aPcBU+PRITyAJ/R7HFtw2tmsloYpLGZgiD9tFEA3QXBGY8hHwhIyJwsmIDUQvpJZnMS 4xE725c+pqmwTzHVE/pNmDetwQ1kMMoGdAuYxekLY8bkV4sQmz57fnOnNRxWMw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1692344504; 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=kiIxTNFiyYKiY4M6bICBw6Q1YQVl0kBZdDD+VE4CJt8=; b=iW+IISRPciF/4UFSIH/jJhiAY/8h04QMBvMpZOzmzLc2xvsrO9LqM1FZGPhN2FA4x3QiAr w2r6I3n6Ag93QKPbJpHVQZTgo2je7H6auJevr8ECnwpJTzovpPAH/kUScTWY2J0lrPTlRZ /K2SEzRnKpWEHhR7eOhAwTgs3/D1ETPYESd6ktQBW4N0Ww2DSKadGrAYJfkZYHtQodRK/u yqG850jMnYvpvwre5rQsBNJRdfr3Y83uUnJLGxbNDNGxQ2V1PsT4w39Xd0juBU3a9UM2hN xCWVPWrVXzirNJgZ3pNGP6HfMxJqTCKI0KsfArieZ2F8VHXQqeMg4sipJQg/CQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1692344504; a=rsa-sha256; cv=none; b=V63L/oZxwIDb23CC94Nl9cZxc/Xu/g15SelKx9hMp4tA3bjoI8PL3ceU0GYT36iTP9EhCs cN28uttdaFcWmwA70Ma19mFkUvSH+gxe/4YPAlypLsChZx2Kc8/zl9mvfTCYIi2nXCiCkt r4stnjwRNuz6JXmkRbUAza0D6u+ICEboDnzl3TaFu2DyiJKZWhXlVD+iqPyGVelYYvYHR6 /s9tgAaIY6MrmRzN5Q9MfnQN5zThbA8h5aq52Q/9y2SYQIeKIWmkJih0DxSAM2XndTJNx8 n4RKJBlTzZt/RjAzyv+r/PuwYRN9Q4SEOycMBwprVDgOIc/75h47b2K0fcuZMA== 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 4RRv2c43j6z176T; Fri, 18 Aug 2023 07:41:44 +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 37I7fieA065755; Fri, 18 Aug 2023 07:41:44 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 37I7fi3E065752; Fri, 18 Aug 2023 07:41:44 GMT (envelope-from git) Date: Fri, 18 Aug 2023 07:41:44 GMT Message-Id: <202308180741.37I7fi3E065752@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: 7ffa1d667f74 - stable/13 - bhyve: add helper for passthru specific mmio ranges 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: 7ffa1d667f748bc6dd84a63ff5f805a1d99c9124 Auto-Submitted: auto-generated The branch stable/13 has been updated by corvink: URL: https://cgit.FreeBSD.org/src/commit/?id=7ffa1d667f748bc6dd84a63ff5f805a1d99c9124 commit 7ffa1d667f748bc6dd84a63ff5f805a1d99c9124 Author: Corvin Köhne AuthorDate: 2023-05-10 10:22:33 +0000 Commit: Corvin Köhne CommitDate: 2023-08-18 07:29:26 +0000 bhyve: add helper for passthru specific mmio ranges Intel GPUs have two special memory regions. They are called Graphics Stolen Memory and OpRegion. bhyve has to emulate both of them. In order to keep track of those special regions, add generic mmio ranges to the passthru emulation. Reviewed by: markj MFC after: 1 week Sponsored by: Beckhoff Automation GmbH & Co. KG Differential Revision: https://reviews.freebsd.org/D40036 (cherry picked from commit 93cf93179c505cebbcdbeef196d523d36890ed4a) --- usr.sbin/bhyve/pci_passthru.c | 12 ++++++++++++ usr.sbin/bhyve/pci_passthru.h | 10 ++++++++++ 2 files changed, 22 insertions(+) diff --git a/usr.sbin/bhyve/pci_passthru.c b/usr.sbin/bhyve/pci_passthru.c index 10e77990c283..d6978a1be822 100644 --- a/usr.sbin/bhyve/pci_passthru.c +++ b/usr.sbin/bhyve/pci_passthru.c @@ -78,6 +78,8 @@ __FBSDID("$FreeBSD$"); #define MSIX_TABLE_COUNT(ctrl) (((ctrl) & PCIM_MSIXCTRL_TABLE_SIZE) + 1) #define MSIX_CAPLEN 12 +#define PASSTHRU_MMIO_MAX 2 + static int pcifd = -1; struct passthru_softc { @@ -94,6 +96,7 @@ struct passthru_softc { } psc_msix; struct pcisel psc_sel; + struct passthru_mmio_mapping psc_mmio_map[PASSTHRU_MMIO_MAX]; cfgread_handler psc_pcir_rhandler[PCI_REGMAX + 1]; cfgwrite_handler psc_pcir_whandler[PCI_REGMAX + 1]; }; @@ -660,6 +663,15 @@ done: return (error); } +struct passthru_mmio_mapping * +passthru_get_mmio(struct passthru_softc *sc, int num) +{ + assert(sc != NULL); + assert(num < PASSTHRU_MMIO_MAX); + + return (&sc->psc_mmio_map[num]); +} + struct pcisel * passthru_get_sel(struct passthru_softc *sc) { diff --git a/usr.sbin/bhyve/pci_passthru.h b/usr.sbin/bhyve/pci_passthru.h index 9b9293cdba7b..7ce12a27bba4 100644 --- a/usr.sbin/bhyve/pci_passthru.h +++ b/usr.sbin/bhyve/pci_passthru.h @@ -11,6 +11,14 @@ #include "pci_emul.h" +struct passthru_mmio_mapping { + vm_paddr_t gpa; /* guest physical address */ + void *gva; /* guest virtual address */ + vm_paddr_t hpa; /* host physical address */ + void *hva; /* guest virtual address */ + vm_paddr_t len; +}; + struct passthru_softc; typedef int (*cfgread_handler)(struct passthru_softc *sc, @@ -24,6 +32,8 @@ int passthru_cfgread_emulate(struct passthru_softc *sc, struct pci_devinst *pi, int coff, int bytes, uint32_t *rv); int passthru_cfgwrite_emulate(struct passthru_softc *sc, struct pci_devinst *pi, int coff, int bytes, uint32_t val); +struct passthru_mmio_mapping *passthru_get_mmio(struct passthru_softc *sc, + int num); struct pcisel *passthru_get_sel(struct passthru_softc *sc); int set_pcir_handler(struct passthru_softc *sc, int reg, int len, cfgread_handler rhandler, cfgwrite_handler whandler);