forked from mirrors/linux
		
	PCI: vmd: Fix shadow offsets to reflect spec changes
The shadow offset scratchpad was moved to 0x2000-0x2010. Update the
location to get the correct shadow offset.
Fixes: 6788958e4f ("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+
			
			
This commit is contained in:
		
							parent
							
								
									e3dffa4f6c
								
							
						
					
					
						commit
						a1a3017013
					
				
					 1 changed files with 6 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -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);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue