From: Baoquan He <bhe@redhat.com>
To: jroedel@suse.de
Cc: iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org,
Baoquan He <bhe@redhat.com>
Subject: [PATCH v10 01/12] iommu/amd: Detect pre enabled translation
Date: Wed, 9 Aug 2017 16:33:33 +0800 [thread overview]
Message-ID: <1502267624-7066-2-git-send-email-bhe@redhat.com> (raw)
In-Reply-To: <1502267624-7066-1-git-send-email-bhe@redhat.com>
Add functions to check whether translation is already enabled in IOMMU.
Signed-off-by: Baoquan He <bhe@redhat.com>
---
drivers/iommu/amd_iommu_init.c | 24 ++++++++++++++++++++++++
drivers/iommu/amd_iommu_proto.h | 1 +
drivers/iommu/amd_iommu_types.h | 3 +++
3 files changed, 28 insertions(+)
diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c
index 372303700566..3f72f44fa2df 100644
--- a/drivers/iommu/amd_iommu_init.c
+++ b/drivers/iommu/amd_iommu_init.c
@@ -258,6 +258,25 @@ static int amd_iommu_enable_interrupts(void);
static int __init iommu_go_to_state(enum iommu_init_state state);
static void init_device_table_dma(void);
+bool translation_pre_enabled(struct amd_iommu *iommu)
+{
+ return (iommu->flags & AMD_IOMMU_FLAG_TRANS_PRE_ENABLED);
+}
+
+static void clear_translation_pre_enabled(struct amd_iommu *iommu)
+{
+ iommu->flags &= ~AMD_IOMMU_FLAG_TRANS_PRE_ENABLED;
+}
+
+static void init_translation_status(struct amd_iommu *iommu)
+{
+ u32 ctrl;
+
+ ctrl = readl(iommu->mmio_base + MMIO_CONTROL_OFFSET);
+ if (ctrl & (1<<CONTROL_IOMMU_EN))
+ iommu->flags |= AMD_IOMMU_FLAG_TRANS_PRE_ENABLED;
+}
+
static inline void update_last_devid(u16 devid)
{
if (devid > amd_iommu_last_bdf)
@@ -1399,6 +1418,11 @@ static int __init init_iommu_one(struct amd_iommu *iommu, struct ivhd_header *h)
iommu->int_enabled = false;
+ init_translation_status(iommu);
+
+ if (translation_pre_enabled(iommu))
+ pr_warn("Translation is already enabled - trying to copy translation structures\n");
+
ret = init_iommu_from_acpi(iommu, h);
if (ret)
return ret;
diff --git a/drivers/iommu/amd_iommu_proto.h b/drivers/iommu/amd_iommu_proto.h
index 466260f8a1df..a9666d2005bb 100644
--- a/drivers/iommu/amd_iommu_proto.h
+++ b/drivers/iommu/amd_iommu_proto.h
@@ -87,4 +87,5 @@ static inline bool iommu_feature(struct amd_iommu *iommu, u64 f)
return !!(iommu->features & f);
}
+extern bool translation_pre_enabled(struct amd_iommu *iommu);
#endif /* _ASM_X86_AMD_IOMMU_PROTO_H */
diff --git a/drivers/iommu/amd_iommu_types.h b/drivers/iommu/amd_iommu_types.h
index 294a409e283b..0c98b2cf04cc 100644
--- a/drivers/iommu/amd_iommu_types.h
+++ b/drivers/iommu/amd_iommu_types.h
@@ -435,6 +435,8 @@ struct iommu_domain;
struct irq_domain;
struct amd_irte_ops;
+#define AMD_IOMMU_FLAG_TRANS_PRE_ENABLED (1 << 0)
+
/*
* This structure contains generic data for IOMMU protection domains
* independent of their use.
@@ -569,6 +571,7 @@ struct amd_iommu {
struct amd_irte_ops *irte_ops;
#endif
+ u32 flags;
volatile u64 __aligned(8) cmd_sem;
};
--
2.5.5
next prev parent reply other threads:[~2017-08-09 8:33 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-09 8:33 [PATCH v10 00/12] Fix the on-flight DMA issue on system with amd iommu Baoquan He
2017-08-09 8:33 ` Baoquan He
2017-08-09 8:33 ` Baoquan He [this message]
2017-08-09 8:33 ` [PATCH v10 03/12] Revert "iommu/amd: Suppress IO_PAGE_FAULTs in kdump kernel" Baoquan He
2017-08-09 8:33 ` [PATCH v10 05/12] iommu/amd: Add function copy_dev_tables() Baoquan He
2017-08-09 8:33 ` [PATCH v10 06/12] iommu/amd: copy old trans table from old kernel Baoquan He
2017-08-09 8:33 ` [PATCH v10 07/12] iommu/amd: Do sanity check for address translation and irq remap of old dev table entry Baoquan He
2017-08-09 8:33 ` [PATCH v10 09/12] iommu/amd: Use is_attach_deferred call-back Baoquan He
2017-08-09 8:33 ` [PATCH v10 10/12] iommu/amd: Allocate memory below 4G for dev table if translation pre-enabled Baoquan He
2017-08-09 8:33 ` [PATCH v10 11/12] iommu/amd: Don't copy GCR3 table root pointer Baoquan He
2017-08-09 8:33 ` [PATCH v10 12/12] iommu/amd: Disable iommu only if amd_iommu=off is specified Baoquan He
[not found] ` <1502267624-7066-1-git-send-email-bhe-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2017-08-09 8:33 ` [PATCH v10 02/12] iommu/amd: add several helper functions Baoquan He
2017-08-09 8:33 ` Baoquan He
2017-08-09 8:33 ` [PATCH v10 04/12] iommu/amd: Define bit fields for DTE particularly Baoquan He
2017-08-09 8:33 ` Baoquan He
2017-08-09 8:33 ` [PATCH v10 08/12] iommu: Add is_attach_deferred call-back to iommu-ops Baoquan He
2017-08-09 8:33 ` Baoquan He
2017-08-15 16:18 ` [PATCH v10 00/12] Fix the on-flight DMA issue on system with amd iommu Joerg Roedel
2017-08-15 16:18 ` Joerg Roedel
[not found] ` <20170815161810.GI2853-l3A5Bk7waGM@public.gmane.org>
2017-08-16 1:31 ` Baoquan He
2017-08-16 1:31 ` Baoquan He
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=1502267624-7066-2-git-send-email-bhe@redhat.com \
--to=bhe@redhat.com \
--cc=iommu@lists.linux-foundation.org \
--cc=jroedel@suse.de \
--cc=linux-kernel@vger.kernel.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.