| From 4ce54efbc10e8dca9886813c9a9dce8d2588cde8 Mon Sep 17 00:00:00 2001 |
| From: Jon Derrick <jonathan.derrick@intel.com> |
| Date: Mon, 16 Sep 2019 07:54:35 -0600 |
| Subject: [PATCH] PCI: vmd: Fix shadow offsets to reflect spec changes |
| |
| commit a1a30170138c9c5157bd514ccd4d76b47060f29b upstream. |
| |
| The shadow offset scratchpad was moved to 0x2000-0x2010. Update the |
| location to get the correct shadow offset. |
| |
| Fixes: 6788958e4f3c ("PCI: vmd: Assign membar addresses from shadow registers") |
| Signed-off-by: Jon Derrick <jonathan.derrick@intel.com> |
| Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> |
| Cc: stable@vger.kernel.org # v5.2+ |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/pci/controller/vmd.c b/drivers/pci/controller/vmd.c |
| index 6c80b9098dd0..21ee1833a247 100644 |
| --- a/drivers/pci/controller/vmd.c |
| +++ b/drivers/pci/controller/vmd.c |
| @@ -31,6 +31,9 @@ |
| #define PCI_REG_VMLOCK 0x70 |
| #define MB2_SHADOW_EN(vmlock) (vmlock & 0x2) |
| |
| +#define MB2_SHADOW_OFFSET 0x2000 |
| +#define MB2_SHADOW_SIZE 16 |
| + |
| enum vmd_features { |
| /* |
| * Device may contain registers which hint the physical location of the |
| @@ -578,7 +581,7 @@ static int vmd_enable_domain(struct vmd_dev *vmd, unsigned long features) |
| u32 vmlock; |
| int ret; |
| |
| - membar2_offset = 0x2018; |
| + membar2_offset = MB2_SHADOW_OFFSET + MB2_SHADOW_SIZE; |
| ret = pci_read_config_dword(vmd->dev, PCI_REG_VMLOCK, &vmlock); |
| if (ret || vmlock == ~0) |
| return -ENODEV; |
| @@ -590,9 +593,9 @@ static int vmd_enable_domain(struct vmd_dev *vmd, unsigned long features) |
| if (!membar2) |
| return -ENOMEM; |
| offset[0] = vmd->dev->resource[VMD_MEMBAR1].start - |
| - readq(membar2 + 0x2008); |
| + readq(membar2 + MB2_SHADOW_OFFSET); |
| offset[1] = vmd->dev->resource[VMD_MEMBAR2].start - |
| - readq(membar2 + 0x2010); |
| + readq(membar2 + MB2_SHADOW_OFFSET + 8); |
| pci_iounmap(vmd->dev, membar2); |
| } |
| } |
| -- |
| 2.7.4 |
| |