Distribution: Ubuntu Hardware Environment: HP TC1105 with Intel 855PM chipset Software Environment: N/A Problem Description: If intel-agp is loaded, then after a system suspend/resume cycle (using ACPI) other PCI drivers fail to work correctly. Setting byte 51 of the PCI configuration space of device 00:00.0 disables AGP but allows other drivers to start working again. After resume, loading the b44 driver with byte 51 set to 02 gives: b44.c:v0.95 (Aug 3, 2004) ACPI: PCI interrupt 0000:02:07.0[A] -> GSI 12 (level, low) -> IRQ 12 eth0: Broadcom 4400 10/100BaseT Ethernet f0:00:00:01:00:00 Setting byte 51 to 0, rmmodding b44 and then re-modprobing it gives: b44.c:v0.95 (Aug 3, 2004) ACPI: PCI interrupt 0000:02:07.0[A] -> GSI 12 (level, low) -> IRQ 12 eth0: Broadcom 4400 10/100BaseT Ethernet 00:0b:cd:ad:28:4d Setting byte 51 back to 2 restores the original failure mode. Possibly significant is that testgart reports the aperture base at 0xe2000000 before suspend and 0xe0000000 after resume. 0xe0000000 overwrites the memory base of various other PCI devices. Could it just be that the aperture base is not maintained over suspend/resume?
Did any earlier versions of 2.6 handle this correctly? If so, which versions? Thanks.
I don't believe so, but I've found the problem. The resume code writes APBASE first - however, APBASE can't be set to a value that conflicts with APSIZE. APSIZE is then written, but APBASE is then not reset. As a result, we get an aperture of the correct size but at a different address to where it was initially - in my case, overlapping with the memory base of various PCI devices. I've hacked around this by storing and explicitly setting APSIZE before setting APBASE, but I'm sure there's a nicer way of doing it.
ooh, I take hacks ;) Please email me the patch+description and Cc Dave Airlie <airlied@linux.ie> and Dave Jones <davej@codemonkey.org.uk> and we'll get this fixed up, thanks.
So I'll assume that Matthew's patch fixed all this up. If not, please reopen the bug.