On Wed, 2019-11-20 at 16:47 +0000, Lorenzo Pieralisi wrote: > On Tue, Nov 12, 2019 at 05:47:52AM -0700, Jon Derrick wrote: > > VMD bus restrictions are required when IO fabric is multiplexed such > > that VMD cannot use the entire bus range. This patch adds another bus > > restriction decode bit that can be set by firmware to restrict the VMD > > bus range to between 224-255. > > > > Signed-off-by: Jon Derrick <jonathan.derrick@xxxxxxxxx> > > --- > > drivers/pci/controller/vmd.c | 30 ++++++++++++++++++++++-------- > > 1 file changed, 22 insertions(+), 8 deletions(-) > > > > diff --git a/drivers/pci/controller/vmd.c b/drivers/pci/controller/vmd.c > > index a35d3f3..15302a1 100644 > > --- a/drivers/pci/controller/vmd.c > > +++ b/drivers/pci/controller/vmd.c > > @@ -602,16 +602,30 @@ static int vmd_enable_domain(struct vmd_dev *vmd, unsigned long features) > > > > /* > > * Certain VMD devices may have a root port configuration option which > > - * limits the bus range to between 0-127 or 128-255 > > + * limits the bus range to between 0-127, 128-255, or 224-255 > > */ > > if (features & VMD_FEAT_HAS_BUS_RESTRICTIONS) { > > - u32 vmcap, vmconfig; > > - > > - pci_read_config_dword(vmd->dev, PCI_REG_VMCAP, &vmcap); > > - pci_read_config_dword(vmd->dev, PCI_REG_VMCONFIG, &vmconfig); > > - if (BUS_RESTRICT_CAP(vmcap) && > > - (BUS_RESTRICT_CFG(vmconfig) == 0x1)) > > - vmd->busn_start = 128; > > + 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"); > > Technically this error+message should be present in the current kernel > as well but anyway, I have applied the series to pci/vmd. Agreed. It was an ambiguous definition in a previous spec. > > Thanks, > Lorenzo Thank you > > > + return -ENODEV; > > + default: > > + break; > > + } > > + } > > } > > > > res = &vmd->dev->resource[VMD_CFGBAR]; > > -- > > 1.8.3.1 > >