[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 2/2] xen/arm: smmuv3: Advertise coherent table walk if supported


  • To: Michal Orzel <michal.orzel@xxxxxxx>
  • From: Rahul Singh <Rahul.Singh@xxxxxxx>
  • Date: Mon, 15 May 2023 08:31:28 +0000
  • Accept-language: en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ZQtJC4hjArQPkI0YrSMQ6T1z7MzxtJjXJZwbRfdp108=; b=eHMoEG9fevQHMo6j90nR2CGMSMLYcrgoIA0tJUc/6l7b7lebpyCDu5Z2XTehekwF+yQUFky89bRMIup6RQpDaiS7lTXlbljriKc1felYi4vbZDN+lU0oZ4lc+1RlrAix2wXY9jkIRPKapAo+trBwyaa9t1N1AtPUiQW7wDIW8JJmsdIWcGJ5867jL/Sky2+7IDhblMWW/niYNZMpeRQTg69Vt9G/2us/FLDkpRHOuPbmCa+qCUg8tBmaoIPFyqoYD9xzUwKu/2fBKKUeETlU3xH+fBIA1nG1jRueyJfFGZBM4RnSEkA4LnZUJoV50wMlAmrhERAquHokWWmPxZLNyA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iFpti8nXVybzuoQbdgHu68yiOX6TzUCAMrMfIx049kgF84+Y8wTpZLN7sPMwJxeLxsTQOiQP/qnSXkwg0190M6HKT85UwUvoWpzPPjBRzjMT+Dh2jGPTBrJ5zVRgRGQ3nfqWUrxbW2z4KMNU4gu1jPHs+HxN9hyPog4D3g7hE/EdIz8nLP45Jmd04KaWnpqT+cmEZQfsfNQlyjFpooeeqNsFv5R/WRZgKpqSQIrgnw1kOS9R7hni2c+/43A8+ZvioIi+fA1FLkIeRNIdWZkkLtSdAWA0toVm4MB3siGEuS+rNiLmJovIeUIgp+YI9EeQM16Qk9W9PZOtgOGuUP/1Mg==
  • Authentication-results-original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Cc: Xen developer discussion <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Bertrand Marquis <Bertrand.Marquis@xxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>
  • Delivery-date: Mon, 15 May 2023 08:31:59 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Nodisclaimer: true
  • Original-authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Thread-index: AQHZhN8Uzg8I+HOn4k6B42UqpaPyEa9bBX8A
  • Thread-topic: [PATCH 2/2] xen/arm: smmuv3: Advertise coherent table walk if supported

Hi Michal,

> On 12 May 2023, at 3:35 pm, Michal Orzel <michal.orzel@xxxxxxx> wrote:
> 
> At the moment, even in case of a SMMU being I/O coherent, we clean the
> updated PT as a result of not advertising the coherency feature. SMMUv3
> coherency feature means that page table walks, accesses to memory
> structures and queues are I/O coherent (refer ARM IHI 0070 E.A, 3.15).
> 
> Follow the same steps that were done for SMMU v1,v2 driver by the commit:
> 080dcb781e1bc3bb22f55a9dfdecb830ccbabe88
> 
> The same restrictions apply, meaning that in order to advertise coherent
> table walk platform feature, all the SMMU devices need to report coherency
> feature. This is because the page tables (we are sharing them with CPU)
> are populated before any device assignment and in case of a device being
> behind non-coherent SMMU, we would have to scan the tables and clean
> the cache.
> 
> It is to be noted that the SBSA/BSA (refer ARM DEN0094C 1.0C, section D)
> requires that all SMMUv3 devices support I/O coherency.
> 
> Signed-off-by: Michal Orzel <michal.orzel@xxxxxxx>
> ---
> There are very few platforms out there with SMMUv3 but I have never seen
> a SMMUv3 that is not I/O coherent.
> ---
> xen/drivers/passthrough/arm/smmu-v3.c | 24 +++++++++++++++++++++++-
> 1 file changed, 23 insertions(+), 1 deletion(-)
> 
> diff --git a/xen/drivers/passthrough/arm/smmu-v3.c 
> b/xen/drivers/passthrough/arm/smmu-v3.c
> index bf053cdb6d5c..2adaad0fa038 100644
> --- a/xen/drivers/passthrough/arm/smmu-v3.c
> +++ b/xen/drivers/passthrough/arm/smmu-v3.c
> @@ -2526,6 +2526,15 @@ static const struct dt_device_match 
> arm_smmu_of_match[] = {
> };
> 
> /* Start of Xen specific code. */
> +
> +/*
> + * Platform features. It indicates the list of features supported by all
> + * SMMUs. Actually we only care about coherent table walk, which in case of
> + * SMMUv3 is implied by the overall coherency feature (refer ARM IHI 0070 
> E.A,
> + * section 3.15 and SMMU_IDR0.COHACC bit description).
> + */
> +static uint32_t platform_features = ARM_SMMU_FEAT_COHERENCY;
> +
> static int __must_check arm_smmu_iotlb_flush_all(struct domain *d)
> {
>       struct arm_smmu_xen_domain *xen_domain = dom_iommu(d)->arch.priv;
> @@ -2708,8 +2717,12 @@ static int arm_smmu_iommu_xen_domain_init(struct 
> domain *d)
>       INIT_LIST_HEAD(&xen_domain->contexts);
> 
>       dom_iommu(d)->arch.priv = xen_domain;
> -     return 0;
> 
> +     /* Coherent walk can be enabled only when all SMMUs support it. */
> +     if (platform_features & ARM_SMMU_FEAT_COHERENCY)
> +             iommu_set_feature(d, IOMMU_FEAT_COHERENT_WALK);
> +
> +     return 0;
> }
> 
> static void arm_smmu_iommu_xen_domain_teardown(struct domain *d)
> @@ -2738,6 +2751,7 @@ static __init int arm_smmu_dt_init(struct 
> dt_device_node *dev,
>                               const void *data)
> {
>       int rc;
> +     const struct arm_smmu_device *smmu;
> 
>       /*
>        * Even if the device can't be initialized, we don't want to
> @@ -2751,6 +2765,14 @@ static __init int arm_smmu_dt_init(struct 
> dt_device_node *dev,
> 
>       iommu_set_ops(&arm_smmu_iommu_ops);
> 
> +     /* Find the just added SMMU and retrieve its features. */
> +     smmu = arm_smmu_get_by_dev(dt_to_dev(dev));
> +
> +     /* It would be a bug not to find the SMMU we just added. */
> +     BUG_ON(!smmu);
> +
> +     platform_features &= smmu->features;
> +
>       return 0;
> }
> 
> -- 
> 2.25.1
> 




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.