linux/drivers/ieee1394
Ben Collins b21efb59c5 Fix broken suspend/resume in ohci1394
I've been experimenting to track down the cause of suspend/resume problems
on my Compaq Presario X1050 laptop:

http://bugzilla.kernel.org/show_bug.cgi?id=6075

Essentially the ACPI Embedded Controller and keyboard controller would
get into a bizarre, confused state after resume.

I found that unloading the ohci1394 module before suspend and reloading it
after resume made the problem go away.  Diffing the dmesg output from
resume, with and without the module loaded, I found that with the module
loaded I was missing these:

PM: Writing back config space on device 0000:02:00.0 at offset 1. (Was 2100080, writing 2100007)
PM: Writing back config space on device 0000:02:00.0 at offset 3. (Was 0, writing 8008)
PM: Writing back config space on device 0000:02:00.0 at offset 4. (Was 0, writing 90200000)
PM: Writing back config space on device 0000:02:00.0 at offset 5. (Was 1, writing 2401)
PM: Writing back config space on device 0000:02:00.0 at offset f. (Was 20000100, writing 2000010a)

The default PCI driver performs the pci_restore_state when no driver is
loaded for the device.  When the ohci1394 driver is loaded, it is supposed
to do this, however it appears not to do so.

I created the patch below and tested it, and it appears to resolve the
suspend problems I was having with the module loaded.  I only added in the
pci_save_state and pci_restore_state - however, though I know little of
this hardware, surely the driver should really be doing more than this when
suspending and resuming?  Currently it does almost nothing, what if there
are commands in progress, etc?

Signed-off-by: Robert Hancock <hancockr@shaw.ca>
Cc: Jody McIntyre <scjody@modernduck.com>
Cc: Ben Collins <bcollins@debian.org>
Cc: Greg KH <greg@kroah.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Ben Collins <bcollins@ubuntu.com>
2006-06-12 18:15:03 -04:00
..
.gitignore gitignore: misc files 2006-01-01 22:21:50 +01:00
Kconfig sbp2: provide helptext for CONFIG_IEEE1394_SBP2_PHYS_DMA and mark it experimental 2006-06-12 18:14:36 -04:00
Makefile Remove amdtp, cmp drivers. 2005-11-18 00:16:26 -05:00
config_roms.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
config_roms.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
csr.c [PATCH] Sync up ieee-1394 2005-07-10 12:23:23 -07:00
csr.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
csr1212.c csr1212: add check for !valid 2005-11-22 12:17:14 -05:00
csr1212.h kmalloc/kzalloc changes: 2005-11-07 06:31:45 -05:00
dma.c ieee1394: speed up of dma_region_sync_for_cpu 2006-06-12 17:52:59 -04:00
dma.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
dv1394-private.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
dv1394.c ieee1394: remove devfs support 2006-03-28 19:55:41 -05:00
dv1394.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
eth1394.c ieee1394: support for slow links or slow 1394b phy ports 2006-06-12 18:12:37 -04:00
eth1394.h [PATCH] eth1394: workaround limitation in rawiso routines 2005-09-30 12:41:19 -07:00
highlevel.c ieee1394: extend lowlevel API for address range properties 2006-06-12 18:13:21 -04:00
highlevel.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
hosts.c From: Arjan van de Ven <arjan@infradead.org> 2006-06-12 18:11:07 -04:00
hosts.h ieee1394: extend lowlevel API for address range properties 2006-06-12 18:13:21 -04:00
ieee1394-ioctl.h Remove amdtp, cmp drivers. 2005-11-18 00:16:26 -05:00
ieee1394.h ieee1394: add definitions for phy packet constants 2005-12-01 18:51:56 -05:00
ieee1394_core.c ieee1394: support for slow links or slow 1394b phy ports 2006-06-12 18:12:37 -04:00
ieee1394_core.h ieee1394: remove amdtp remains from ieee1394_core.h 2006-03-28 19:56:45 -05:00
ieee1394_hotplug.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ieee1394_transactions.c ieee1394: save RAM by using a single tlabel for broadcast transactions 2006-06-12 18:12:49 -04:00
ieee1394_transactions.h [PATCH] ieee1394: drivers/ieee1394/ieee1394_transactions.c: possible cleanups 2005-05-17 07:59:22 -07:00
ieee1394_types.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
iso.c ieee1394/iso: LIndent fixes 2005-11-22 12:35:23 -05:00
iso.h [PATCH] Sync up ieee-1394 2005-07-10 12:23:23 -07:00
nodemgr.c ieee1394: support for slow links or slow 1394b phy ports 2006-06-12 18:12:37 -04:00
nodemgr.h ieee1394: remove nonexistent functions from nodemgr.h 2005-12-05 16:29:02 -05:00
ohci1394.c Fix broken suspend/resume in ohci1394 2006-06-12 18:15:03 -04:00
ohci1394.h ohci1394: set address range properties 2006-06-12 18:13:32 -04:00
oui.db Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
oui2c.sh Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pcilynx.c kmalloc/kzalloc changes: 2005-11-07 06:31:45 -05:00
pcilynx.h [PATCH] ieee1394: drivers/ieee1394/pcilynx.c: remove dead options 2005-05-17 07:59:22 -07:00
raw1394-private.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
raw1394.c raw1394: fix whitespace after x86_64 compat patch 2006-06-12 18:12:10 -04:00
raw1394.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
sbp2.c sbp2: fix S800 transfers if phys_dma is off 2006-06-12 18:14:14 -04:00
sbp2.h sbp2: use __attribute__((packed)) for on-the-wire structures 2006-06-12 18:14:47 -04:00
video1394.c video1394: be quiet 2006-06-12 17:52:16 -04:00
video1394.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00