[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <m1psahsab1.fsf@ebiederm.dsl.xmission.com>
Date: Mon, 18 Dec 2006 04:38:58 -0700
From: ebiederm@...ssion.com (Eric W. Biederman)
To: Dave Jones <davej@...hat.com>
Cc: Daniel Drake <dsd@...too.org>,
linux list <linux-kernel@...r.kernel.org>
Subject: Re: amd64 agpgart aperture base value
Dave Jones <davej@...hat.com> writes:
> On Thu, Dec 14, 2006 at 06:35:30PM -0500, Daniel Drake wrote:
>
> > So, you think that the aperture moving to a different location on every
> > boot is what the BIOS desires? Is it normal for it to move so much?
>
> Beats me. I gave up trying to understand BIOS authors motivations years ago.
>
> > The current patch drops the upper bits and results in the aperture
> > always being in the same place, and this appears to work. If the BIOS
> > did really put the aperture beyond 4GB but my patch is making Linux put
> > it somewhere else, does it surprise you that things are still working
> > smoothly?
>
> Does it survive a run of testgart when masking out the high bits?
> It could be that you're right, and the upper bits being reported really
> are garbage.
>
> > Is it even possible for the aperture to start beyond 4GB when the system
> > has less than 4GB of RAM?
>
> The amount of RAM is irrelevant, it can appear anywhere in the address space,
> which on 64bit, is pretty darned huge. The aperture isn't backed by RAM,
> it's a 'virtual window' of sorts. When you write to an address in that range, it
> gets transparently remapped to somewhere else in the address space.
> The window is the 'aperture', where it remaps to is controlled by a translation
> table called the GATT (which does live in real memory).
>
> That's pretty much all there is to AGP. It's just a really dumb MMU of sorts.
Well I just took a quick look, and it looks like there is a bug in amd64-agp.c
It isn't masking off the reserved high bits of the register at 0x94, and it
isn't being very careful with the promotion to 64bits.
However that does not appear to be the problem, as the base addresses you are
seeing are only seeing 40 bits long, and you are fixing it in the register
before the code in amd64-agp.c runs.
So I do agree that it appears that the BIOS is letting the upper address bits
float, and giving you a 32bit value.
Fixing this with a board specific pci quirk is questionable but it may
be ok. A reliable fix is probably if the address is sufficiently questionable
to allocate a new aperture ourselves, and scream that the BIOS messed up.
arch/x86_64/kernel/aperture.c appears to do that when we use the agp aperture
for an iommu.
I don't think a agp aperture above 64bits is actually very interesting,
in practice as most agp cards are only 32bits so won't be able to use it.
And we are talking bus addresses here.
Eric
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists