Message ID | 20210121123623.2060416-1-jean-philippe@linaro.org |
---|---|
Headers | show |
Series | iommu: I/O page faults for SMMUv3 | expand |
On Thu, 21 Jan 2021 13:36:23 +0100 Jean-Philippe Brucker <jean-philippe@linaro.org> wrote: > Copy the "Stall supported" bit, that tells whether a named component > supports stall, into the dma-can-stall device property. > > Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org> FWIW given how simple this is : Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> > --- > drivers/acpi/arm64/iort.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c > index c9a8bbb74b09..42820d7eb869 100644 > --- a/drivers/acpi/arm64/iort.c > +++ b/drivers/acpi/arm64/iort.c > @@ -968,13 +968,15 @@ static int iort_pci_iommu_init(struct pci_dev *pdev, u16 alias, void *data) > static void iort_named_component_init(struct device *dev, > struct acpi_iort_node *node) > { > - struct property_entry props[2] = {}; > + struct property_entry props[3] = {}; > struct acpi_iort_named_component *nc; > > nc = (struct acpi_iort_named_component *)node->node_data; > props[0] = PROPERTY_ENTRY_U32("pasid-num-bits", > FIELD_GET(ACPI_IORT_NC_PASID_BITS, > nc->node_flags)); > + if (nc->node_flags & ACPI_IORT_NC_STALL_SUPPORTED) > + props[1] = PROPERTY_ENTRY_BOOL("dma-can-stall"); > > if (device_add_properties(dev, props)) > dev_warn(dev, "Could not add device properties\n");
Hi Jean, On 1/21/21 8:36 PM, Jean-Philippe Brucker wrote: > Allow drivers to query and enable IOMMU_DEV_FEAT_IOPF, which amounts to > checking whether PRI is enabled. > > Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org> Reviewed-by: Lu Baolu <baolu.lu@linux.intel.com> Best regards, baolu > --- > Cc: David Woodhouse <dwmw2@infradead.org> > Cc: Lu Baolu <baolu.lu@linux.intel.com> > --- > drivers/iommu/intel/iommu.c | 11 ++++++++--- > 1 file changed, 8 insertions(+), 3 deletions(-) > > diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c > index f665322a0991..c777bd94df5d 100644 > --- a/drivers/iommu/intel/iommu.c > +++ b/drivers/iommu/intel/iommu.c > @@ -5330,6 +5330,8 @@ static int siov_find_pci_dvsec(struct pci_dev *pdev) > static bool > intel_iommu_dev_has_feat(struct device *dev, enum iommu_dev_features feat) > { > + struct device_domain_info *info = get_domain_info(dev); > + > if (feat == IOMMU_DEV_FEAT_AUX) { > int ret; > > @@ -5344,13 +5346,13 @@ intel_iommu_dev_has_feat(struct device *dev, enum iommu_dev_features feat) > return !!siov_find_pci_dvsec(to_pci_dev(dev)); > } > > - if (feat == IOMMU_DEV_FEAT_SVA) { > - struct device_domain_info *info = get_domain_info(dev); > + if (feat == IOMMU_DEV_FEAT_IOPF) > + return info && info->pri_supported; > > + if (feat == IOMMU_DEV_FEAT_SVA) > return info && (info->iommu->flags & VTD_FLAG_SVM_CAPABLE) && > info->pasid_supported && info->pri_supported && > info->ats_supported; > - } > > return false; > } > @@ -5361,6 +5363,9 @@ intel_iommu_dev_enable_feat(struct device *dev, enum iommu_dev_features feat) > if (feat == IOMMU_DEV_FEAT_AUX) > return intel_iommu_enable_auxd(dev); > > + if (feat == IOMMU_DEV_FEAT_IOPF) > + return intel_iommu_dev_has_feat(dev, feat) ? 0 : -ENODEV; > + > if (feat == IOMMU_DEV_FEAT_SVA) { > struct device_domain_info *info = get_domain_info(dev); > >