mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-04-07 23:14:21 +00:00
x86/PCI: VMD: Attach VMD resources to parent domain's resource tree
Attach the new VMD domain's resources to the VMD device's resources. This allows /proc/iomem to display a more complete picture. Before: c0000000-c1ffffff : 0000:5d:05.5 c2000000-c3ffffff : 0000:5d:05.5 c2010000-c2013fff : nvme c4000000-c40fffff : 0000:5d:05.5 After: c0000000-c1ffffff : 0000:5d:05.5 c2000000-c3ffffff : 0000:5d:05.5 c2000000-c3ffffff : VMD MEMBAR1 c2000000-c22fffff : PCI Bus 10000:01 c2000000-c200ffff : 10000:01:00.0 c2010000-c2013fff : 10000:01:00.0 c2010000-c2013fff : nvme c2300000-c24fffff : PCI Bus 10000:01 c4000000-c40fffff : 0000:5d:05.5 c4002000-c40fffff : VMD MEMBAR2 Signed-off-by: Jon Derrick <jonathan.derrick@intel.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Keith Busch <keith.busch@intel.com>
This commit is contained in:
parent
d068c350c0
commit
2c2c5c5cd2
1 changed files with 16 additions and 0 deletions
|
@ -503,6 +503,18 @@ static struct pci_ops vmd_ops = {
|
||||||
.write = vmd_pci_write,
|
.write = vmd_pci_write,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void vmd_attach_resources(struct vmd_dev *vmd)
|
||||||
|
{
|
||||||
|
vmd->dev->resource[VMD_MEMBAR1].child = &vmd->resources[1];
|
||||||
|
vmd->dev->resource[VMD_MEMBAR2].child = &vmd->resources[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
static void vmd_detach_resources(struct vmd_dev *vmd)
|
||||||
|
{
|
||||||
|
vmd->dev->resource[VMD_MEMBAR1].child = NULL;
|
||||||
|
vmd->dev->resource[VMD_MEMBAR2].child = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* VMD domains start at 0x1000 to not clash with ACPI _SEG domains.
|
* VMD domains start at 0x1000 to not clash with ACPI _SEG domains.
|
||||||
*/
|
*/
|
||||||
|
@ -559,6 +571,7 @@ static int vmd_enable_domain(struct vmd_dev *vmd)
|
||||||
.start = res->start,
|
.start = res->start,
|
||||||
.end = res->end,
|
.end = res->end,
|
||||||
.flags = flags,
|
.flags = flags,
|
||||||
|
.parent = res,
|
||||||
};
|
};
|
||||||
|
|
||||||
res = &vmd->dev->resource[VMD_MEMBAR2];
|
res = &vmd->dev->resource[VMD_MEMBAR2];
|
||||||
|
@ -571,6 +584,7 @@ static int vmd_enable_domain(struct vmd_dev *vmd)
|
||||||
.start = res->start + 0x2000,
|
.start = res->start + 0x2000,
|
||||||
.end = res->end,
|
.end = res->end,
|
||||||
.flags = flags,
|
.flags = flags,
|
||||||
|
.parent = res,
|
||||||
};
|
};
|
||||||
|
|
||||||
sd->domain = vmd_find_free_domain();
|
sd->domain = vmd_find_free_domain();
|
||||||
|
@ -595,6 +609,7 @@ static int vmd_enable_domain(struct vmd_dev *vmd)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vmd_attach_resources(vmd);
|
||||||
vmd_setup_dma_ops(vmd);
|
vmd_setup_dma_ops(vmd);
|
||||||
dev_set_msi_domain(&vmd->bus->dev, vmd->irq_domain);
|
dev_set_msi_domain(&vmd->bus->dev, vmd->irq_domain);
|
||||||
pci_rescan_bus(vmd->bus);
|
pci_rescan_bus(vmd->bus);
|
||||||
|
@ -691,6 +706,7 @@ static void vmd_remove(struct pci_dev *dev)
|
||||||
{
|
{
|
||||||
struct vmd_dev *vmd = pci_get_drvdata(dev);
|
struct vmd_dev *vmd = pci_get_drvdata(dev);
|
||||||
|
|
||||||
|
vmd_detach_resources(vmd);
|
||||||
pci_set_drvdata(dev, NULL);
|
pci_set_drvdata(dev, NULL);
|
||||||
sysfs_remove_link(&vmd->dev->dev.kobj, "domain");
|
sysfs_remove_link(&vmd->dev->dev.kobj, "domain");
|
||||||
pci_stop_root_bus(vmd->bus);
|
pci_stop_root_bus(vmd->bus);
|
||||||
|
|
Loading…
Add table
Reference in a new issue