From: Jon Derrick <jonathan.derrick@intel.com>
To: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Bjorn Helgaas <helgaas@kernel.org>, <linux-pci@vger.kernel.org>,
Pawel Baldysiak <pawel.baldysiak@intel.com>,
Artur Paszkiewicz <artur.paszkiewicz@intel.com>,
Keith Busch <keith.busch@intel.com>,
Dave Fugate <david.fugate@intel.com>,
Andy Shevchenko <andriy.shevchenko@intel.com>,
Jon Derrick <jonathan.derrick@intel.com>
Subject: [PATCH 3/3] PCI: vmd: Restore domain info during resets/unloads
Date: Wed, 16 Oct 2019 11:04:48 -0600 [thread overview]
Message-ID: <1571245488-3549-4-git-send-email-jonathan.derrick@intel.com> (raw)
In-Reply-To: <1571245488-3549-1-git-send-email-jonathan.derrick@intel.com>
Persistent domain info written by VMD BIOS needs to be restored by the
driver during module unloads or resets. This adds a remove or reset
action to restore the parsed domain info to all enabled VMD Root Ports.
Signed-off-by: Jon Derrick <jonathan.derrick@intel.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
drivers/pci/controller/vmd.c | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/drivers/pci/controller/vmd.c b/drivers/pci/controller/vmd.c
index dbe1bff..853aa93 100644
--- a/drivers/pci/controller/vmd.c
+++ b/drivers/pci/controller/vmd.c
@@ -562,6 +562,33 @@ static int vmd_pci_write(struct pci_bus *bus, unsigned int devfn, int reg,
PCI_VENDOR_ID, 4, &temp) || \
temp == 0xffffffff) {} else
+static void vmd_restore_domain(void *data)
+{
+ struct vmd_dev *vmd = data;
+ int root_port;
+ u32 temp, iobase;
+
+ /*
+ * It shouldn't be possible for the Root Port layout to change
+ * dynamically (outside of BIOS), however there is no harm in writing
+ * the persistent data back to all enabled Root Ports. PCI resource
+ * assignment will discard any modifications on the next VMD domain bus
+ * scan following VMD reset/probe.
+ */
+ for_each_vmd_root_port(vmd, root_port, temp) {
+ if (vmd_cfg_read(vmd, 0, PCI_DEVFN(root_port, 0),
+ PCI_IO_BASE, 2, &iobase))
+ return;
+
+ iobase &= ~((0xf << 4) | (0x3 << 14));
+ iobase |= vmd->socket_nr << 4 | vmd->instance_nr << 14;
+
+ if (vmd_cfg_write(vmd, 0, PCI_DEVFN(root_port, 0),
+ PCI_IO_BASE, 2, iobase))
+ return;
+ }
+}
+
static int vmd_parse_domain(struct vmd_dev *vmd)
{
int root_port, ret;
@@ -579,6 +606,11 @@ static int vmd_parse_domain(struct vmd_dev *vmd)
vmd->socket_nr = (iobase >> 4) & 0xf;
vmd->instance_nr = (iobase >> 14) & 0x3;
+ ret = devm_add_action_or_reset(&vmd->dev->dev,
+ vmd_restore_domain, vmd);
+ if (ret)
+ return ret;
+
/* First available will be used */
break;
}
--
1.8.3.1
prev parent reply other threads:[~2019-10-16 23:06 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-16 17:04 [PATCH 0/3] Expose VMD BIOS domain info Jon Derrick
2019-10-16 17:04 ` [PATCH 1/3] PCI: vmd: Add helpers to access device config space Jon Derrick
2019-10-16 17:04 ` [PATCH 2/3] PCI: vmd: Expose VMD details from BIOS Jon Derrick
2019-10-31 11:37 ` Lorenzo Pieralisi
2019-11-01 13:16 ` Andrew Murray
2019-11-01 14:24 ` Derrick, Jonathan
2019-11-01 14:44 ` Andrew Murray
2019-11-01 21:53 ` Bjorn Helgaas
2019-11-01 22:16 ` Derrick, Jonathan
2019-11-04 18:07 ` Lorenzo Pieralisi
2019-11-05 10:12 ` Lorenzo Pieralisi
2019-11-05 21:32 ` Derrick, Jonathan
2019-11-05 22:22 ` Keith Busch
2019-11-05 22:38 ` Derrick, Jonathan
2019-11-05 22:45 ` Keith Busch
2020-01-27 10:38 ` Lorenzo Pieralisi
2020-01-27 23:48 ` Derrick, Jonathan
2019-10-16 17:04 ` Jon Derrick [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1571245488-3549-4-git-send-email-jonathan.derrick@intel.com \
--to=jonathan.derrick@intel.com \
--cc=andriy.shevchenko@intel.com \
--cc=artur.paszkiewicz@intel.com \
--cc=david.fugate@intel.com \
--cc=helgaas@kernel.org \
--cc=keith.busch@intel.com \
--cc=linux-pci@vger.kernel.org \
--cc=lorenzo.pieralisi@arm.com \
--cc=pawel.baldysiak@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.