Bug 12127

Summary: alpha: AGP GART support missing on Irongate motherboards (UP1000, UP1100, UP1500) due to memory coherency issues
Product: Platform Specific/Hardware Reporter: Matt Turner (mattst88)
Component: AlphaAssignee: Richard Henderson (rth)
Status: CLOSED WILL_NOT_FIX    
Severity: normal CC: alan, ink, mattst88, wlgivens
Priority: P1    
Hardware: All   
OS: Linux   
Kernel Version: 2.6.28-rc6 Subsystem:
Regression: No Bisected commit-id:
Attachments: Original irongate_setup_agp function

Description Matt Turner 2008-11-30 19:26:25 UTC
Hardware Environment: Irongate (AMD-751, AMD-761) chipset motherboards (UP1000, UP1100, UP1500)

Problem Description:

AGP GART support is missing on Irongate motherboards (UP1000, UP1100, and UP1500) due to memory coherency issues.

See arch/alpha/kernel/core_irongate.c,

251 static void __init
252 irongate_setup_agp(void)
253 {
254         /* Disable the GART window. AGPGART doesn't work due to yet
255            unresolved memory coherency issues... */
256         IRONGATE0->agpva = IRONGATE0->agpva & ~0xf;
257         alpha_agpgart_size = 0;
258 }

Just a reminder that there are Alpha users still here with this equipment, and that there is still a bug in this code somewhere.

Unfortunately, lacking AGP GART support reduces what would be 2x and 4x AGP buses on UP1{0,1}00 and UP1500 respectively to 1x AGP, or the bandwidth of a standard PCI bus.
Comment 1 Alan 2008-12-01 08:40:13 UTC
Send patches. Realistically that is the only way you will get this changed for such old hardware.
Comment 2 Will L Givens 2008-12-01 09:58:46 UTC
It seems it was supported in the 2.4.x kernels and was quietly dropped in the 2.6.x release?!?!
ftp://ftp.az.kernel.org/pub/linux/kernel/v2.4/patch-html/patch-2.4.10/linux_arch_alpha_kernel_core_irongate.c.html

Even though we don't 'complain', there are still plenty of UP1x00 out there. I just recently purchased a UP1500 NIB (new in box).
Comment 3 Matt Turner 2008-12-01 12:09:09 UTC
AMD Chipset documentation is easily available, but unfortunately I don't believe the code dealing with it is at fault.

AMD 751-Docs: http://www.amd.com/us-en/Processors/TechnicalResources/0,,30_182_739_1133%5E1137,00.html
AMD-761 Docs: http://www.amd.com/us-en/Processors/TechnicalResources/0,,30_182_739_1133,00.html

More unfortunately, the only email address in the file is @dec.com. The other three names are from Alpha Processor, Inc. :(

Ivan, Jay, and rth, can you confirm that this is definitely an Alpha problem and not an AGP problem? Any insight or suggestions for fixing this?
Comment 4 Matt Turner 2009-01-01 15:52:17 UTC
http://www.alphalinux.org/archives/linux-alpha/December1999/0049.html

Richard Henderson seems to have previously worked on this.

The mail and patch are from 1999, but may be somehow useful.

Richard, I'll email you directly as well, but I think I have a UP1500 for you.
Comment 5 Matt Turner 2009-01-07 18:10:03 UTC
Created attachment 19713 [details]
Original irongate_setup_agp function

Attached is a patch which includes the original irongate_setup_agp function code. That is, before it was disabled and removed.

It _will_ not magically fix this bug, but it may provide a starting point for at minimum reproducing the bug(s) that caused its removal.

Reassigning this bug to Ivan Kokshaysky since he appears to have made non-trivial changes to core_irongate.c.
Comment 6 Ivan Kokshaysky 2009-01-29 15:49:28 UTC
Actually I worked on this back in 2003 (kernel 2.5.69 or something around
that):

http://lkml.org/lkml/2003/5/14/76

Later I found that PALcode is indeed broken (at least on UP1500) and
it's not possible to work around the AGP related machine checks.
So I had to give up on that stuff.

In theory, it's possible to fix the PALcode ;-) - all you need is up-to-date
SRM source code for nautilus, OpenVMS box and something like Console
Development Kit (cannot recall its correct name).

But realistically, I think we should wipe out remaining traces of AGP from
core_irongate and stick to PCI GART mode.
Comment 7 Matt Turner 2009-08-06 04:14:24 UTC
OK, here's the story:

After discussion with Ivan and review of the hardware reference manual, it was determined that AGP and Alphas are inherently incompatible for a number of reasons, namely that Alpha is cache coherent, AGP is not.

So the easy way isn't possible.

Possibly, AGP GART support could be implemented using the "magic" 16 Gb offset, but given the restrictions, it's probably not worth it.

Please close this bug as WONTFIX or whichever.