diff options
author | Andi Kleen <ak@suse.de> | 2005-01-11 01:46:10 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-01-11 01:46:10 -0800 |
commit | 9245af41178d08d464d1d9ba72ea82f32816c691 (patch) | |
tree | e53ac48bccca20cbab649e45b3685f41e25509da /arch | |
parent | 36573f3751d02a213ab227d30a728c6c8eeb8354 (diff) | |
download | history-9245af41178d08d464d1d9ba72ea82f32816c691.tar.gz |
[PATCH] x86_64: Work around another aperture BIOS bug on Opteron
Work around another aperture BIOS bug on Opteron
Based on debugging&code from Vincent ETIENNE <ve@vetienne.net>
>>
I have some problem with AGP initialization with my board : IWILL DK8N (Bi
opteron chipset NFORCE3 ). I use kernel 2.6.10-rc3-mm1, but i have try with
IOMMU reports a 128MB aperture for CPU0 ( that's the value i used in my bios)
at F0000000 but only 32MB at 4000000 for CPU1
<<
This patch checks for this condition and fixes the other CPUs up.
Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86_64/kernel/aperture.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/arch/x86_64/kernel/aperture.c b/arch/x86_64/kernel/aperture.c index 1d8b3912c1d908..4baa99fe1e5c95 100644 --- a/arch/x86_64/kernel/aperture.c +++ b/arch/x86_64/kernel/aperture.c @@ -200,8 +200,8 @@ static __u32 __init search_agp_bridge(u32 *order, int *valid_agp) void __init iommu_hole_init(void) { int fix, num; - u32 aper_size, aper_alloc = 0, aper_order; - u64 aper_base; + u32 aper_size, aper_alloc = 0, aper_order, last_aper_order = 0; + u64 aper_base, last_aper_base = 0; int valid_agp = 0; if (iommu_aperture_disabled || !fix_aperture) @@ -230,7 +230,15 @@ void __init iommu_hole_init(void) if (!aperture_valid(name, aper_base, aper_size)) { fix = 1; break; - } + } + + if ((last_aper_order && aper_order != last_aper_order) || + (last_aper_base && aper_base != last_aper_base)) { + fix = 1; + break; + } + last_aper_order = aper_order; + last_aper_base = aper_base; } if (!fix && !fallback_aper_force) |