PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Howto: AGP auf einem K8T800 mit Kernel 2.6.x


(del676)
2004-01-02, 14:04:39
die k8t800 user werden folgene error msgs vielleicht kennen wenn sie den 2.6.0 getestet haben:

dmesg:
Jan 2 12:51:09 sunnygentoo32 kernel: Linux agpgart interface v0.100 (c) Dave Jones
Jan 2 12:51:37 sunnygentoo32 kernel: agpgart: Detected AGP bridge 0
Jan 2 12:51:37 sunnygentoo32 kernel: agpgart: Too many northbridges for AGP
Jan 2 12:53:47 sunnygentoo32 kernel: nvidia: no version magic, tainting kernel.
Jan 2 12:53:47 sunnygentoo32 kernel: nvidia: module license 'NVIDIA' taints kernel.
Jan 2 12:53:47 sunnygentoo32 kernel: 0: nvidia: loading NVIDIA Linux x86 nvidia.o Kernel Module 1.0-5328 Wed Dec 17 13:54:51 PST 2003

and XF86log:
(**) NVIDIA(0): Use of AGPGART requested
(--) NVIDIA(0): Linear framebuffer at 0xB0000000
(--) NVIDIA(0): MMIO registers at 0xCE000000
(II) NVIDIA(0): NVIDIA GPU detected as: GeForce FX 5900 Ultra
(--) NVIDIA(0): VideoBIOS: 04.35.20.22.00
(--) NVIDIA(0): VideoRAM: 262144 kBytes

(WW) NVIDIA(0): Failed to verify AGP usage

sunnydale root # cat /proc/driver/nvidia/agp/status
Status: Disabled


da gibts aber ne simple lösung
öffnet mal die /usr/src/linux/drivers/char/agp/amd64-agp.c

und sucht nach dieser sektion:

static __devinit int cache_nbs (struct pci_dev *pdev, u32 cap_ptr)
{
struct pci_dev *loop_dev = NULL;
int i = 0;

/* cache pci_devs of northbridges. */
while ((loop_dev = pci_find_device(PCI_VENDOR_ID_AMD, 0x1103, loop_dev))
!= NULL) {
if (fix_northbridge(loop_dev, pdev, cap_ptr) < 0) {
printk(KERN_INFO PFX "No usable aperture found.\n");
#ifdef __x86_64__
/* should port this to i386 */
printk(KERN_INFO PFX "Consider rebooting with iommu=memaper=2 to get a good aperture.\n");
#endif
return -1;
}

hammers[i++] = loop_dev;
nr_garts = i;

if (i == MAX_HAMMER_GARTS) {
printk(KERN_INFO PFX "Too many northbridges for AGP\n");
return -1;
}

}
return i == 0 ? -1 : 0;
}

und ändert sie folgendermassen:

static __devinit int cache_nbs (struct pci_dev *pdev, u32 cap_ptr)
{
struct pci_dev *loop_dev = NULL;
int i = 0;

/* cache pci_devs of northbridges. */
while ((loop_dev = pci_find_device(PCI_VENDOR_ID_AMD, 0x1103, loop_dev))
!= NULL) {
if (fix_northbridge(loop_dev, pdev, cap_ptr) < 0) {
printk(KERN_INFO PFX "No usable aperture found.\n");
#ifdef __x86_64__
/* should port this to i386 */
printk(KERN_INFO PFX "Consider rebooting with iommu=memaper=2 to get a good aperture.\n");
#endif
return -1;
}

if (i == MAX_HAMMER_GARTS) {
printk(KERN_INFO PFX "Too many northbridges for AGP\n");
return -1;
}

hammers[i++] = loop_dev;
nr_garts = i;

}
return i == 0 ? -1 : 0;
}

(diese zwei zeilen leicht verschieben
hammers[i++] = loop_dev;
nr_garts = i;)



meine agp kernel module hab ich so konfiguriert:
<M> /dev/agpgart (AGP Support)
<M> AMD Opteron/Athlon64 on-CPU GART support

nach dem editieren der file müsst ihr noch die kernel module neu kompilieren:
cd /usr/src/linux
make modules modules_install

und die module neu laden.
nvidia user sollten in der XF86Config
"NvAgp" "2"
setzten

dann kommt das raus:

dmesg;
Linux agpgart interface v0.100 (c) Dave Jones
agpgart: Detected AGP bridge 0
agpgart: Maximum main memory to use for agp memory: 941M
agpgart: AGP aperture is 256M @ 0xd0000000

nvidia: no version magic, tainting kernel.
nvidia: module license 'NVIDIA' taints kernel.
0: nvidia: loading NVIDIA Linux x86 nvidia.o Kernel Module 1.0-5328 Wed Dec 17 13:54:51 PST 2003
agpgart: Found an AGP 3.0 compliant device at 0000:00:00.0.
agpgart: Putting AGP V3 device at 0000:00:00.0 into 8x mode
agpgart: Putting AGP V3 device at 0000:01:00.0 into 8x mode

XF86log:
(II) NVIDIA(0): AGP 8X successfully initialized


sunnygentoo32 root # cat /proc/driver/nvidia/agp/status
Status: Enabled
Driver: AGPGART
AGP Rate: 8x
Fast Writes: Enabled
SBA: Enabled

Harleckin
2004-01-02, 14:31:04
Um es kurz zu machen, dies muss also am den Kernelsourcen geändert werden.

('diff -Nu amd64-agp.c.orig amd64-agp.c')

--- amd64-agp.c.orig 2004-01-02 14:00:06.077242408 +0100
+++ amd64-agp.c 2004-01-02 14:00:49.736605176 +0100
@@ -355,12 +355,12 @@
#endif
return -1;
}
- hammers[i++] = loop_dev;
- nr_garts = i;
if (i == MAX_HAMMER_GARTS) {
printk(KERN_INFO PFX "Too many northbridges for AGP\n");
return -1;
}
+ hammers[i++] = loop_dev;
+ nr_garts = i;
}
return i == 0 ? -1 : 0;
}

(del676)
2004-01-07, 23:12:49
im 2.6.1-rc2 patch von kernel.org is dieser (und viele andere fixes) drin