From: Joerg Roedel <joerg.roedel@amd.com>
To: Ingo Molnar <mingo@redhat.com>
Cc: x86@kernel.org, iommu@lists.linux-foundation.org,
linux-kernel@vger.kernel.org, Joerg Roedel <joerg.roedel@amd.com>
Subject: [PATCH 12/12] x86/gart: Disable GART explicitly before initialization
Date: Wed, 7 Apr 2010 14:46:49 +0200 [thread overview]
Message-ID: <1270644409-10123-13-git-send-email-joerg.roedel@amd.com> (raw)
In-Reply-To: <1270644409-10123-1-git-send-email-joerg.roedel@amd.com>
If we boot into a crash-kernel the gart might still be
enabled and its caches might be dirty. This can result in
undefined behavior later. Fix it by explicitly disabling the
gart hardware before initialization and flushing the caches
after enablement.
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
---
arch/x86/kernel/aperture_64.c | 15 ++++++++++++++-
arch/x86/kernel/pci-gart_64.c | 3 +++
2 files changed, 17 insertions(+), 1 deletions(-)
diff --git a/arch/x86/kernel/aperture_64.c b/arch/x86/kernel/aperture_64.c
index 3704997..b5d8b0b 100644
--- a/arch/x86/kernel/aperture_64.c
+++ b/arch/x86/kernel/aperture_64.c
@@ -393,6 +393,7 @@ void __init gart_iommu_hole_init(void)
for (i = 0; i < ARRAY_SIZE(bus_dev_ranges); i++) {
int bus;
int dev_base, dev_limit;
+ u32 ctl;
bus = bus_dev_ranges[i].bus;
dev_base = bus_dev_ranges[i].dev_base;
@@ -406,7 +407,19 @@ void __init gart_iommu_hole_init(void)
gart_iommu_aperture = 1;
x86_init.iommu.iommu_init = gart_iommu_init;
- aper_order = (read_pci_config(bus, slot, 3, AMD64_GARTAPERTURECTL) >> 1) & 7;
+ ctl = read_pci_config(bus, slot, 3,
+ AMD64_GARTAPERTURECTL);
+
+ /*
+ * Before we do anything else disable the GART. It may
+ * still be enabled if we boot into a crash-kernel here.
+ * Reconfiguring the GART while it is enabled could have
+ * unknown side-effects.
+ */
+ ctl &= ~GARTEN;
+ write_pci_config(bus, slot, 3, AMD64_GARTAPERTURECTL, ctl);
+
+ aper_order = (ctl >> 1) & 7;
aper_size = (32 * 1024 * 1024) << aper_order;
aper_base = read_pci_config(bus, slot, 3, AMD64_GARTAPERTUREBASE) & 0x7fff;
aper_base <<= 25;
diff --git a/arch/x86/kernel/pci-gart_64.c b/arch/x86/kernel/pci-gart_64.c
index f3af115..0ae24d9 100644
--- a/arch/x86/kernel/pci-gart_64.c
+++ b/arch/x86/kernel/pci-gart_64.c
@@ -564,6 +564,9 @@ static void enable_gart_translations(void)
enable_gart_translation(dev, __pa(agp_gatt_table));
}
+
+ /* Flush the GART-TLB to remove stale entries */
+ k8_flush_garts();
}
/*
--
1.7.0.4
next prev parent reply other threads:[~2010-04-07 12:49 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-07 12:46 [GIT PULL][PATCH 0/12] IOMMU fixes for 2.6.34-rc3 Joerg Roedel
2010-04-07 12:46 ` [PATCH 01/12] x86/amd-iommu: Remove double NULL check in check_device Joerg Roedel
2010-04-07 12:46 ` [PATCH 02/12] x86/amd-iommu: Protect IOMMU-API map/unmap path Joerg Roedel
2010-04-07 12:46 ` [PATCH 03/12] x86/amd-iommu: Pt mode fix for domain_destroy Joerg Roedel
2010-04-07 12:46 ` [PATCH 04/12] x86/amd-iommu: Report errors in acpi parsing functions upstream Joerg Roedel
2010-04-07 12:46 ` [PATCH 05/12] x86/amd-iommu: Use helper function to destroy domain Joerg Roedel
2010-04-07 12:46 ` [PATCH 06/12] x86/amd-iommu: enable iommu before attaching devices Joerg Roedel
2010-04-07 12:46 ` [PATCH 07/12] x86/amd-iommu: warn when issuing command to uninitialized cmd buffer Joerg Roedel
2010-04-07 12:46 ` [PATCH 08/12] Revert "x86: disable IOMMUs on kernel crash" Joerg Roedel
2010-04-07 12:46 ` [PATCH 09/12] x86/amd-iommu: use for_each_pci_dev Joerg Roedel
2010-04-07 12:46 ` [PATCH 10/12] x86/amd-iommu: Remove obsolete parameter documentation Joerg Roedel
2010-04-07 12:46 ` [PATCH 11/12] dma-debug: Cleanup for copy-loop in filter_write() Joerg Roedel
2010-04-07 12:46 ` Joerg Roedel [this message]
2010-04-13 11:25 ` [GIT PULL][PATCH 0/12] IOMMU fixes for 2.6.34-rc3 Ingo Molnar
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=1270644409-10123-13-git-send-email-joerg.roedel@amd.com \
--to=joerg.roedel@amd.com \
--cc=iommu@lists.linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=x86@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®