mirror of https://gitee.com/openkylin/linux.git
PCI: vmd: Create bus offset configuration helper
Move the bus offset configuration discovery code to a new helper. Modify the bus offset 2-bit decode switch to have a 0 case and a default error case, just in case the field is expanded in future hardware. Link: https://lore.kernel.org/r/20200728194945.14126-3-jonathan.derrick@intel.com Signed-off-by: Jon Derrick <jonathan.derrick@intel.com> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
This commit is contained in:
parent
030109c037
commit
2e1224183b
|
@ -471,6 +471,35 @@ static int vmd_get_phys_offsets(struct vmd_dev *vmd, bool native_hint,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int vmd_get_bus_number_start(struct vmd_dev *vmd)
|
||||
{
|
||||
struct pci_dev *dev = vmd->dev;
|
||||
u16 reg;
|
||||
|
||||
pci_read_config_word(dev, PCI_REG_VMCAP, ®);
|
||||
if (BUS_RESTRICT_CAP(reg)) {
|
||||
pci_read_config_word(dev, PCI_REG_VMCONFIG, ®);
|
||||
|
||||
switch (BUS_RESTRICT_CFG(reg)) {
|
||||
case 0:
|
||||
vmd->busn_start = 0;
|
||||
break;
|
||||
case 1:
|
||||
vmd->busn_start = 128;
|
||||
break;
|
||||
case 2:
|
||||
vmd->busn_start = 224;
|
||||
break;
|
||||
default:
|
||||
pci_err(dev, "Unknown Bus Offset Setting (%d)\n",
|
||||
BUS_RESTRICT_CFG(reg));
|
||||
return -ENODEV;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int vmd_enable_domain(struct vmd_dev *vmd, unsigned long features)
|
||||
{
|
||||
struct pci_sysdata *sd = &vmd->sysdata;
|
||||
|
@ -506,27 +535,9 @@ static int vmd_enable_domain(struct vmd_dev *vmd, unsigned long features)
|
|||
* limits the bus range to between 0-127, 128-255, or 224-255
|
||||
*/
|
||||
if (features & VMD_FEAT_HAS_BUS_RESTRICTIONS) {
|
||||
u16 reg16;
|
||||
|
||||
pci_read_config_word(vmd->dev, PCI_REG_VMCAP, ®16);
|
||||
if (BUS_RESTRICT_CAP(reg16)) {
|
||||
pci_read_config_word(vmd->dev, PCI_REG_VMCONFIG,
|
||||
®16);
|
||||
|
||||
switch (BUS_RESTRICT_CFG(reg16)) {
|
||||
case 1:
|
||||
vmd->busn_start = 128;
|
||||
break;
|
||||
case 2:
|
||||
vmd->busn_start = 224;
|
||||
break;
|
||||
case 3:
|
||||
pci_err(vmd->dev, "Unknown Bus Offset Setting\n");
|
||||
return -ENODEV;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
ret = vmd_get_bus_number_start(vmd);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
res = &vmd->dev->resource[VMD_CFGBAR];
|
||||
|
|
Loading…
Reference in New Issue