All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
To: Oleksandr Tyshchenko <olekstysh@gmail.com>,
	"xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	Julien Grall <julien@xen.org>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>,
	Bertrand Marquis <bertrand.marquis@arm.com>
Subject: RE: [PATCH 08/10] iommu/ipmmu-vmsa: Set IPMMU bit IMSCTLR_USE_SECGRP to 0
Date: Thu, 16 Dec 2021 12:48:49 +0000	[thread overview]
Message-ID: <TY2PR01MB369226FC51154F6E9BA37886D8779@TY2PR01MB3692.jpnprd01.prod.outlook.com> (raw)
In-Reply-To: <1638035505-16931-9-git-send-email-olekstysh@gmail.com>

Hello Oleksandr-san,

Thank you for the patch!

> From: Oleksandr Tyshchenko, Sent: Sunday, November 28, 2021 2:52 AM
> 
> From: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
> 
> Based on the following commits from the Renesas BSP:
> 8fba83d97cca709a05139c38e29408e81ed4cf62
> a8d93bc07da89a7fcf4d85f34d119a030310efa5
> located at:
<snip>
> 
> Original commit messages:
>  commit 8fba83d97cca709a05139c38e29408e81ed4cf62
>  Author: Nam Nguyen <nam.nguyen.yh@renesas.com>
>  Date:   Wed Apr 28 18:54:44 2021 +0700
> 
>   iommu/ipmmu-vmsa: Set IPMMU bit IMSCTLR_USE_SECGRP to 0
> 
>   Need to set bit IMSCTLR_USE_SECGRP to 0
>   because H/W initial value is unknown, without this
>   dma-transfer cannot be done due to address translation doesn't work.
> 
>   Signed-off-by: Nam Nguyen <nam.nguyen.yh@renesas.com>
> 
>  commit a8d93bc07da89a7fcf4d85f34d119a030310efa5
>  Author: Nam Nguyen <nam.nguyen.yh@renesas.com>
>  Date:   Tue Sep 7 14:46:12 2021 +0700
> 
>   iommu/ipmmu-vmsa: Update IMSCTLR register offset address for R-Car S4
> 
>   Update IMSCTLR register offset address to align with R-Car S4 H/W UM.
> 
>   Signed-off-by: Nam Nguyen <nam.nguyen.yh@renesas.com>
> 
> **********
> 
> It is still a question whether this really needs to be done in Xen,
> rather in firmware, but better to be on the safe side. After all,
> if firmware already takes care of clearing this bit, nothing bad
> will happen.

IIUC, we need this for IPMMU-DS0.

> Please note the following:
> 1. I decided to squash both commits since the first commit adds clearing
> code and only the second one makes it functional on S4. Moreover, this is
> not a direct port. So it would be better to introduce complete solution
> by a single patch.

I agree.
However, I realized IMSCTLR and IMSAUXCTLR registers' offset differs
between Gen3 and Gen4. About BSP patch of 07/10, it seems to take care
of the offset. But, Linux upstream based code doesn't take care of it.
So, we have to add a new member (maybe "control_offset_base" is a good name?)
to calculate the address.

> 2. Although patch indeed does what it claims in the subject,
> the implementation is different in comparison with original changes.
> On Linux the clearing is done at runtime in ipmmu_domain_setup_context().
> On Xen the clearing is done at boot time in ipmmu_probe().
> 
> The IMSCTLR is not a MMU "context" register at all, so I think there is
> no point in performing the clearing each time we initialize the context,
> instead perform the clearing at once during initialization.

ipmmu_domain_setup_context() is called in probing and resuming.
So, it's enough to clear in ipmmu_probe() I think.

> Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
> ---
>  xen/drivers/passthrough/arm/ipmmu-vmsa.c | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/xen/drivers/passthrough/arm/ipmmu-vmsa.c b/xen/drivers/passthrough/arm/ipmmu-vmsa.c
> index 8dfdae8..22dd84e 100644
> --- a/xen/drivers/passthrough/arm/ipmmu-vmsa.c
> +++ b/xen/drivers/passthrough/arm/ipmmu-vmsa.c
> @@ -229,6 +229,9 @@ static DEFINE_SPINLOCK(ipmmu_devices_lock);
>  #define IMUASID0(n)            (0x0308 + ((n) * 16))
>  #define IMUASID32(n)           (0x0608 + (((n) - 32) * 16))
> 
> +#define IMSCTLR             0x0500
> +#define IMSCTLR_USE_SECGRP  (1 << 28)
> +
>  #define IMSAUXCTLR          0x0504
>  #define IMSAUXCTLR_S2PTE    (1 << 3)

As I mentioned above, we have to adjust these registers' offset for
both Gen3 (+0) and Gen4 (+0x1000) somehow.

> @@ -979,6 +982,10 @@ static int ipmmu_probe(struct dt_device_node *node)
>          set_bit(0, mmu->ctx);
>      }
> 
> +    /* Do not use security group function. */
> +    reg = IMSCTLR + mmu->features->ctx_offset_stride_adj;
> +    ipmmu_write(mmu, reg, ipmmu_read(mmu, reg) & ~IMSCTLR_USE_SECGRP);

If we modify the 07/10 patch, we cannot use ctx_offset_stride_adj.
# But, using "ctx_offset" here seems to be abused though because
# the register is not context.

Best regards,
Yoshihiro Shimoda



  parent reply	other threads:[~2021-12-16 12:49 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-27 17:51 [PATCH 00/10] Add support for Renesas R-Car S4 IPMMU and other misc changes Oleksandr Tyshchenko
2021-11-27 17:51 ` [PATCH 01/10] iommu/ipmmu-vmsa: Remove all unused register definitions Oleksandr Tyshchenko
2021-12-14 12:05   ` Yoshihiro Shimoda
2021-11-27 17:51 ` [PATCH 02/10] iommu/ipmmu-vmsa: Add helper functions for MMU "context" registers Oleksandr Tyshchenko
2021-12-14 12:05   ` Yoshihiro Shimoda
2021-11-27 17:51 ` [PATCH 03/10] iommu/ipmmu-vmsa: Add helper functions for "uTLB" registers Oleksandr Tyshchenko
2021-12-14 12:05   ` Yoshihiro Shimoda
2021-11-27 17:51 ` [PATCH 04/10] iommu/ipmmu-vmsa: Add light version of Linux's ipmmu_features Oleksandr Tyshchenko
2021-12-14 12:05   ` Yoshihiro Shimoda
2021-11-27 17:51 ` [PATCH 05/10] iommu/ipmmu-vmsa: Calculate context registers' offset instead of a macro Oleksandr Tyshchenko
2021-12-14 12:06   ` Yoshihiro Shimoda
2021-11-27 17:51 ` [PATCH 06/10] iommu/ipmmu-vmsa: Add utlb_offset_base Oleksandr Tyshchenko
2021-12-14 12:07   ` Yoshihiro Shimoda
2021-11-27 17:51 ` [PATCH 07/10] iommu/ipmmu-vmsa: Add Renesas R8A779F0 (R-Car S4) support Oleksandr Tyshchenko
2021-12-14 12:10   ` Yoshihiro Shimoda
2021-12-14 12:38     ` Oleksandr
2021-11-27 17:51 ` [PATCH 08/10] iommu/ipmmu-vmsa: Set IPMMU bit IMSCTLR_USE_SECGRP to 0 Oleksandr Tyshchenko
2021-12-15  2:44   ` Volodymyr Babchuk
2021-12-16 12:48   ` Yoshihiro Shimoda [this message]
2021-12-16 16:45     ` Oleksandr
2021-11-27 17:51 ` [PATCH 09/10] iommu/ipmmu-vmsa: Use refcount for the micro-TLBs Oleksandr Tyshchenko
2021-12-15  2:58   ` Volodymyr Babchuk
2021-12-15 13:41     ` Oleksandr
2021-12-16 13:20   ` Yoshihiro Shimoda
2021-11-27 17:51 ` [PATCH 10/10] iommu/arm: Remove code duplication in all IOMMU drivers Oleksandr Tyshchenko
2021-12-15  3:03   ` Volodymyr Babchuk
2021-12-16 13:22   ` Yoshihiro Shimoda
2021-12-13 10:05 ` [PATCH 00/10] Add support for Renesas R-Car S4 IPMMU and other misc changes Oleksandr
2021-12-13 10:11   ` Julien Grall
2021-12-13 11:38     ` Oleksandr
2022-01-26 16:20 ` Julien Grall
2022-01-26 16:28   ` Oleksandr Tyshchenko
2022-01-26 16:30     ` Julien Grall

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=TY2PR01MB369226FC51154F6E9BA37886D8779@TY2PR01MB3692.jpnprd01.prod.outlook.com \
    --to=yoshihiro.shimoda.uh@renesas.com \
    --cc=Volodymyr_Babchuk@epam.com \
    --cc=bertrand.marquis@arm.com \
    --cc=julien@xen.org \
    --cc=oleksandr_tyshchenko@epam.com \
    --cc=olekstysh@gmail.com \
    --cc=sstabellini@kernel.org \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.