Hi Michal,

Thank you for your review and the Ack.

>> +    dsb(sy);
> Any clue why Linux (mainline) does not do that?

The implementation writel() which contains an implicit dsb(st) which likely 
sufficient for Linux for its Stage-1 IOMMU usage where CPU and IOMMU 
interactions are coherent. 
However, Xen uses the IPMMU as a Stage-2 IOMMU for non-coherent DMA operations 
(such as PCIe passthrough), requiring the stronger dsb(sy) to ensure writes 
fully propagate to the IPMMU hardware before continuing.

Regards,
Jahan 

-----Original Message-----
From: Orzel, Michal <michal.or...@amd.com> 
Sent: 23 June 2025 12:56
To: Jahan Murudi <jahan.murudi...@renesas.com>; xen-devel@lists.xenproject.org
Cc: Stefano Stabellini <sstabell...@kernel.org>; Julien Grall <jul...@xen.org>; 
Bertrand Marquis <bertrand.marq...@arm.com>; Volodymyr Babchuk 
<volodymyr_babc...@epam.com>
Subject: Re: [PATCH] xen/arm: Enhance IPMMU-VMSA driver robustness and debug 
output



On 20/06/2025 12:31, Jahan Murudi wrote:
> - Fix typo in source comment ("you can found" -> "which can be found").
> - Add dsb(sy) after IMCTR write to ensure flush is complete before polling.
> - Add dev_info() log in ipmmu_device_reset() to indicate the number of 
> disabled contexts.
> 
> These changes improve memory operation ordering, code readability, and 
> runtime traceability for IPMMU on R-Car Gen3/Gen4 SoCs
> 
> Signed-off-by: Jahan Murudi <jahan.murudi...@renesas.com>
Acked-by: Michal Orzel <michal.or...@amd.com>

> ---
>  xen/drivers/passthrough/arm/ipmmu-vmsa.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/xen/drivers/passthrough/arm/ipmmu-vmsa.c 
> b/xen/drivers/passthrough/arm/ipmmu-vmsa.c
> index d828d9cf6a..dac0dd6d46 100644
> --- a/xen/drivers/passthrough/arm/ipmmu-vmsa.c
> +++ b/xen/drivers/passthrough/arm/ipmmu-vmsa.c
> @@ -13,7 +13,7 @@
>   *
>   * Based on Linux's IPMMU-VMSA driver from Renesas BSP:
>   *    drivers/iommu/ipmmu-vmsa.c
> - * you can found at:
> + * which can be found at:
>   *    url: 
> git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas-bsp.git
>   *    branch: v4.14.75-ltsi/rcar-3.9.6
>   *    commit: e206eb5b81a60e64c35fbc3a999b1a0db2b98044
> @@ -433,6 +433,8 @@ static void ipmmu_tlb_invalidate(struct ipmmu_vmsa_domain 
> *domain)
>      data |= IMCTR_FLUSH;
>      ipmmu_ctx_write_all(domain, IMCTR, data);
>  
> +    /* Force IMCTR write to complete before polling to avoid false 
> completion check. */
> +    dsb(sy);
Any clue why Linux (mainline) does not do that?

~Michal

Reply via email to