Re: 2.6.16-rc4 libata + AHCI patched for suspend fails on ICH6

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 21 Feb 2006, Ariel Garcia wrote:

> Hi Randy, Jens,
>
> > > The first thing to try is to add the acpi addon from Randy and see if
> > > that helps at all. Looking at the log, the first command we issue
> > > after resume times out which smells a lot like an unlock command
> > > missing (which is typically in the GTF list from acpi).
> >
> > Ariel-
> > These patches (for 2.6.16-rc3) are at
> >http://www.xenotime.net/linux/SATA/2.6.16-rc3/libata-rollup-2616-rc3.patch
> > in case you didn't find them yet.
>
> yes, thanks! i had found them, but i hadn't reported yet because it didn't
> work (exactly the same output as w/o the patch) and i wanted to enable
> your new debugging functionality to get some additional feedback.
>
> So at least now (printk=255) i can see that there seems to be an error
> _before_ the suspend, just when loading the GTFs (whatever they are ;-)

The ACPI "_GTF" method "gets taskfiles" (=> GTF).  Taskfiles
are one or more arrays of ATA-interface registers.

> do_drive_get_GTF: ERR: ata_dev_present: 0, PORT_DISABLED: 0
> ata_acpi_exec_tfs: get_GTF error (-19)
> ata_acpi_exec_tfs: ret=-19
>
> but no extra debugging output after the suspend/restart. Does that help?
> dmesg output attached.

The "error" is only for the second drive (ix=1, which you don't have,
right?).  I guess I need to disable that message.

Please add this additional patch (attached) (credit: SUSE) and
let us know if it helps.  Meanwhile I will check the resume
path to see if I notice anything that is missing.

-- 
~Randy
--- linux-2.6.15/drivers/acpi/pci_link.c.orig	2006-02-14 13:51:44.009176954 +0100
+++ linux-2.6.15/drivers/acpi/pci_link.c	2006-02-15 13:32:45.659221867 +0100
@@ -803,6 +803,7 @@ static int irqrouter_resume(struct sys_d
 	struct list_head *node = NULL;
 	struct acpi_pci_link *link = NULL;
 
+	printk(KERN_DEBUG "irqrouter_resume: ENTER\n");
 	ACPI_FUNCTION_TRACE("irqrouter_resume");
 
 	acpi_in_resume = 1;
@@ -815,6 +816,7 @@ static int irqrouter_resume(struct sys_d
 		acpi_pci_link_resume(link);
 	}
 	acpi_in_resume = 0;
+	printk(KERN_DEBUG "irqrouter_resume: EXIT\n");
 	return_VALUE(0);
 }
 
--- linux-2.6.15/drivers/scsi/libata-core.c.orig	2006-02-16 12:29:49.805524922 +0100
+++ linux-2.6.15/drivers/scsi/libata-core.c	2006-02-16 12:31:45.191603849 +0100
@@ -4296,13 +4296,17 @@ static int ata_start_drive(struct ata_po
  */
 int ata_device_resume(struct ata_port *ap, struct ata_device *dev)
 {
+	printk(KERN_DEBUG "ata%d: resume device\n", ap->id);
+
+	WARN_ON (irqs_disabled());
+
+	if (!ata_dev_present(dev))
+		return 0;
+	ata_acpi_exec_tfs(ap);
 	if (ap->flags & ATA_FLAG_SUSPENDED) {
 		ap->flags &= ~ATA_FLAG_SUSPENDED;
 		ata_set_mode(ap);
 	}
-	if (!ata_dev_present(dev))
-		return 0;
-	ata_acpi_exec_tfs(ap);
 	if (dev->class == ATA_DEV_ATA)
 		ata_start_drive(ap, dev);
 
@@ -4318,6 +4322,7 @@ int ata_device_resume(struct ata_port *a
  */
 int ata_device_suspend(struct ata_port *ap, struct ata_device *dev)
 {
+	printk(KERN_DEBUG "ata%d: suspend device\n", ap->id);
 	if (!ata_dev_present(dev))
 		return 0;
 	if (dev->class == ATA_DEV_ATA)
@@ -5098,6 +5103,7 @@ int pci_test_config_bits(struct pci_dev 
 
 int ata_pci_device_suspend(struct pci_dev *pdev, pm_message_t state)
 {
+	dev_printk(KERN_DEBUG, &pdev->dev, "suspend PCI device\n");
 	pci_save_state(pdev);
 	pci_disable_device(pdev);
 	pci_set_power_state(pdev, PCI_D3hot);
@@ -5106,6 +5112,7 @@ int ata_pci_device_suspend(struct pci_de
 
 int ata_pci_device_resume(struct pci_dev *pdev)
 {
+	dev_printk(KERN_DEBUG, &pdev->dev, "resume PCI device\n");
 	pci_set_power_state(pdev, PCI_D0);
 	pci_restore_state(pdev);
 	pci_enable_device(pdev);

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux