From: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com> To: linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org Cc: joro@8bytes.org, robin.murphy@arm.com, Suravee Suthikulpanit <suravee.suthikulpanit@amd.com> Subject: [PATCH v2 11/13] iommu/amd: Introduce iommu_v1_iova_to_phys Date: Fri, 2 Oct 2020 12:28:28 +0000 [thread overview] Message-ID: <20201002122830.4051-12-suravee.suthikulpanit@amd.com> (raw) In-Reply-To: <20201002122830.4051-1-suravee.suthikulpanit@amd.com> This implements iova_to_phys for AMD IOMMU v1 pagetable, which will be used by the IO page table framework. Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com> --- drivers/iommu/amd/io_pgtable.c | 21 +++++++++++++++++++++ drivers/iommu/amd/iommu.c | 16 +--------------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/drivers/iommu/amd/io_pgtable.c b/drivers/iommu/amd/io_pgtable.c index 1729c303bae5..bbbf18d2514a 100644 --- a/drivers/iommu/amd/io_pgtable.c +++ b/drivers/iommu/amd/io_pgtable.c @@ -494,6 +494,26 @@ unsigned long iommu_unmap_page(struct protection_domain *dom, return unmapped; } +static phys_addr_t iommu_v1_iova_to_phys(struct io_pgtable_ops *ops, unsigned long iova) +{ + struct amd_io_pgtable *pgtable = io_pgtable_ops_to_data(ops); + unsigned long offset_mask, pte_pgsize; + u64 *pte, __pte; + + if (pgtable->mode == PAGE_MODE_NONE) + return iova; + + pte = fetch_pte(pgtable, iova, &pte_pgsize); + + if (!pte || !IOMMU_PTE_PRESENT(*pte)) + return 0; + + offset_mask = pte_pgsize - 1; + __pte = __sme_clr(*pte & PM_ADDR_MASK); + + return (__pte & ~offset_mask) | (iova & offset_mask); +} + /* * ---------------------------------------------------- */ @@ -505,6 +525,7 @@ static struct io_pgtable *v1_alloc_pgtable(struct io_pgtable_cfg *cfg, void *coo { struct protection_domain *pdom = (struct protection_domain *)cookie; + pdom->iop.iop.ops.iova_to_phys = iommu_v1_iova_to_phys; return &pdom->iop.iop; } diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c index 87cea1cde414..9a1a16031e00 100644 --- a/drivers/iommu/amd/iommu.c +++ b/drivers/iommu/amd/iommu.c @@ -2079,22 +2079,8 @@ static phys_addr_t amd_iommu_iova_to_phys(struct iommu_domain *dom, { struct protection_domain *domain = to_pdomain(dom); struct io_pgtable_ops *ops = &domain->iop.iop.ops; - struct amd_io_pgtable *pgtable = io_pgtable_ops_to_data(ops); - unsigned long offset_mask, pte_pgsize; - u64 *pte, __pte; - if (domain->iop.mode == PAGE_MODE_NONE) - return iova; - - pte = fetch_pte(pgtable, iova, &pte_pgsize); - - if (!pte || !IOMMU_PTE_PRESENT(*pte)) - return 0; - - offset_mask = pte_pgsize - 1; - __pte = __sme_clr(*pte & PM_ADDR_MASK); - - return (__pte & ~offset_mask) | (iova & offset_mask); + return ops->iova_to_phys(ops, iova); } static bool amd_iommu_capable(enum iommu_cap cap) -- 2.17.1
WARNING: multiple messages have this Message-ID (diff)
From: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com> To: linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org Cc: robin.murphy@arm.com Subject: [PATCH v2 11/13] iommu/amd: Introduce iommu_v1_iova_to_phys Date: Fri, 2 Oct 2020 12:28:28 +0000 [thread overview] Message-ID: <20201002122830.4051-12-suravee.suthikulpanit@amd.com> (raw) In-Reply-To: <20201002122830.4051-1-suravee.suthikulpanit@amd.com> This implements iova_to_phys for AMD IOMMU v1 pagetable, which will be used by the IO page table framework. Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com> --- drivers/iommu/amd/io_pgtable.c | 21 +++++++++++++++++++++ drivers/iommu/amd/iommu.c | 16 +--------------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/drivers/iommu/amd/io_pgtable.c b/drivers/iommu/amd/io_pgtable.c index 1729c303bae5..bbbf18d2514a 100644 --- a/drivers/iommu/amd/io_pgtable.c +++ b/drivers/iommu/amd/io_pgtable.c @@ -494,6 +494,26 @@ unsigned long iommu_unmap_page(struct protection_domain *dom, return unmapped; } +static phys_addr_t iommu_v1_iova_to_phys(struct io_pgtable_ops *ops, unsigned long iova) +{ + struct amd_io_pgtable *pgtable = io_pgtable_ops_to_data(ops); + unsigned long offset_mask, pte_pgsize; + u64 *pte, __pte; + + if (pgtable->mode == PAGE_MODE_NONE) + return iova; + + pte = fetch_pte(pgtable, iova, &pte_pgsize); + + if (!pte || !IOMMU_PTE_PRESENT(*pte)) + return 0; + + offset_mask = pte_pgsize - 1; + __pte = __sme_clr(*pte & PM_ADDR_MASK); + + return (__pte & ~offset_mask) | (iova & offset_mask); +} + /* * ---------------------------------------------------- */ @@ -505,6 +525,7 @@ static struct io_pgtable *v1_alloc_pgtable(struct io_pgtable_cfg *cfg, void *coo { struct protection_domain *pdom = (struct protection_domain *)cookie; + pdom->iop.iop.ops.iova_to_phys = iommu_v1_iova_to_phys; return &pdom->iop.iop; } diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c index 87cea1cde414..9a1a16031e00 100644 --- a/drivers/iommu/amd/iommu.c +++ b/drivers/iommu/amd/iommu.c @@ -2079,22 +2079,8 @@ static phys_addr_t amd_iommu_iova_to_phys(struct iommu_domain *dom, { struct protection_domain *domain = to_pdomain(dom); struct io_pgtable_ops *ops = &domain->iop.iop.ops; - struct amd_io_pgtable *pgtable = io_pgtable_ops_to_data(ops); - unsigned long offset_mask, pte_pgsize; - u64 *pte, __pte; - if (domain->iop.mode == PAGE_MODE_NONE) - return iova; - - pte = fetch_pte(pgtable, iova, &pte_pgsize); - - if (!pte || !IOMMU_PTE_PRESENT(*pte)) - return 0; - - offset_mask = pte_pgsize - 1; - __pte = __sme_clr(*pte & PM_ADDR_MASK); - - return (__pte & ~offset_mask) | (iova & offset_mask); + return ops->iova_to_phys(ops, iova); } static bool amd_iommu_capable(enum iommu_cap cap) -- 2.17.1 _______________________________________________ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu
next prev parent reply other threads:[~2020-10-02 12:25 UTC|newest] Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-10-02 12:28 [PATCH v2 00/13] iommu/amd: Add Generic IO Page Table Framework Support Suravee Suthikulpanit 2020-10-02 12:28 ` Suravee Suthikulpanit 2020-10-02 12:28 ` [PATCH v2 01/13] iommu/amd: Re-define amd_iommu_domain_encode_pgtable as inline Suravee Suthikulpanit 2020-10-02 12:28 ` Suravee Suthikulpanit 2020-10-02 12:28 ` [PATCH v2 02/13] iommu/amd: Prepare for generic IO page table framework Suravee Suthikulpanit 2020-10-02 12:28 ` Suravee Suthikulpanit 2020-10-02 12:28 ` [PATCH v2 03/13] iommu/amd: Move pt_root to to struct amd_io_pgtable Suravee Suthikulpanit 2020-10-02 12:28 ` Suravee Suthikulpanit 2020-10-02 12:28 ` [PATCH v2 04/13] iommu/amd: Convert to using amd_io_pgtable Suravee Suthikulpanit 2020-10-02 12:28 ` Suravee Suthikulpanit 2020-10-02 12:28 ` [PATCH v2 05/13] iommu/amd: Declare functions as extern Suravee Suthikulpanit 2020-10-02 12:28 ` Suravee Suthikulpanit 2020-10-02 12:28 ` [PATCH v2 06/13] iommu/amd: Move IO page table related functions Suravee Suthikulpanit 2020-10-02 12:28 ` Suravee Suthikulpanit 2020-10-02 12:28 ` [PATCH v2 07/13] iommu/amd: Restructure code for freeing page table Suravee Suthikulpanit 2020-10-02 12:28 ` Suravee Suthikulpanit 2020-10-02 12:28 ` [PATCH v2 08/13] iommu/amd: Remove amd_iommu_domain_get_pgtable Suravee Suthikulpanit 2020-10-02 12:28 ` Suravee Suthikulpanit 2020-10-02 12:28 ` [PATCH v2 09/13] iommu/amd: Rename variables to be consistent with struct io_pgtable_ops Suravee Suthikulpanit 2020-10-02 12:28 ` Suravee Suthikulpanit 2020-10-02 12:28 ` [PATCH v2 10/13] iommu/amd: Refactor fetch_pte to use struct amd_io_pgtable Suravee Suthikulpanit 2020-10-02 12:28 ` Suravee Suthikulpanit 2020-10-02 12:28 ` Suravee Suthikulpanit [this message] 2020-10-02 12:28 ` [PATCH v2 11/13] iommu/amd: Introduce iommu_v1_iova_to_phys Suravee Suthikulpanit 2020-10-02 12:28 ` [PATCH v2 12/13] iommu/amd: Introduce iommu_v1_map_page and iommu_v1_unmap_page Suravee Suthikulpanit 2020-10-02 12:28 ` Suravee Suthikulpanit 2020-10-02 12:28 ` [PATCH v2 13/13] iommu/amd: Adopt IO page table framework Suravee Suthikulpanit 2020-10-02 12:28 ` Suravee Suthikulpanit 2020-10-03 13:08 ` [PATCH v2 00/13] iommu/amd: Add Generic IO Page Table Framework Support Suravee Suthikulpanit 2020-10-03 13:08 ` Suravee Suthikulpanit
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=20201002122830.4051-12-suravee.suthikulpanit@amd.com \ --to=suravee.suthikulpanit@amd.com \ --cc=iommu@lists.linux-foundation.org \ --cc=joro@8bytes.org \ --cc=linux-kernel@vger.kernel.org \ --cc=robin.murphy@arm.com \ /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: linkBe 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.