Re: Fw: ata-piix ACPI errors

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

 



On Thu, 2007-03-01 at 03:17 +0900, Tejun Heo wrote:
> Hello, Thomas.
> 
> Thomas Renninger wrote:
> > On Fri, 2007-02-23 at 02:08 -0800, Andrew Morton wrote:
> >> I'm starting to think that big acpi merge came a bit too soon.
> >>
> >> Begin forwarded message:
> >>
> >> Date: Thu, 22 Feb 2007 15:29:42 +0200 (EET)
> >> From: Meelis Roos <mroos@xxxxxxxx>
> >> To: Linux Kernel list <linux-kernel@xxxxxxxxxxxxxxx>
> >> Subject: ata-piix ACPI errors
> >>
> >>
> >> Testbooted 2.6.21-rc1+todays git on a PC with Intel 845 chipset and PATA 
> >> HDD. Works fine but I now have these ACPI errors in dmesg, maybe someone 
> >> is interested:
> >>
> >> ata_piix 0000:00:1f.1: version 2.00ac7
> >> PCI: Enabling device 0000:00:1f.1 (0005 -> 0007)
> >> ACPI: PCI Interrupt 0000:00:1f.1[A] -> GSI 18 (level, low) -> IRQ 18
> >> PCI: Setting latency timer of device 0000:00:1f.1 to 64
> >> ata1: PATA max UDMA/100 cmd 0x000101f0 ctl 0x000103f6 bmdma 0x0001ffa0 irq 14
> >> ata2: PATA max UDMA/100 cmd 0x00010170 ctl 0x00010376 bmdma 0x0001ffa8 irq 15
> >> scsi0 : ata_piix
> >> ACPI Error (dsopcode-0481): Attempt to CreateField of length zero [20070126]
> >
> > I expect this to be ACPI (interpreter) unrelated and the bug should be
> > in drivers/ata/libata-acpi.c.
> > The problem is that libata-acpi.c calls _GTF function before _STM has
> > been called. This is forbidden by ACPI spec.
> 
> I can't find such wording in acpi 3.0a spec.  It says _STM may make
> adjustments to the result of _GTF.  Hmmm... the suspend/resume order
> does specify that _STM should be called before _GTF but nothing seems to
> mandate use of _GTM and _STM.
I also can't find the explicit statement there now.
It seems that the steps described must be processed in the same order as
written down there(9.9.2 IDE Controller Device):
Powering up:
• Power up drive (calls _PS0 method if present and turns
  on power planes).
• Call _STM passing info from _GTM (possibly modified),
  with ID data from each drive.
• Initialize the channel.
• May modify the results of _GTF.
• For each drive: Call _GTF. Execute task file (possibly modified).

Libata subsystem has no choice here as AML code (C&Ped through
several BIOSes?) already relies on that.
I put some info of a bug report here to reproduce:
ftp.suse.com/pub/people/trenn/sata_acpi_errors_216853

If you do:
acpiexec DSDT.dat
 -> execute \_SB_.PCI0.IDE0.CHN0.DRV0._GTF
you get exactly the error spit out in kernel/dmesg log:
ACPI Error (dsopcode-0601): Attempt to CreateField of length zero
[20060912]

If you quit and try again, calling:
 -> execute \_SB_.PCI0.IDE0.CHN0._STM 0 0 0
 -> execute \_SB_.PCI0.IDE0.CHN0.DRV0._GTF

Everything is fine...

I looked a bit at the asl code:
At end of _STM "Store (GTF (0x00, Arg1), ATA0)" (not _GTF!, GTF is just
a helper function) is called.
ATA0 gets filled here and is the field that is later used in _GTF which
throws an error in the called RATA func, if ATA0 has not been filled
yet.

It's not that easy and a bit difficult to put in words...

> 
> I think libata-acpi has several issues here.
> 
> 1. Missing _GTM/_STM support.  This is because mode programming is
> essential to PATA controllers and we do it in more conventional way
> (poking PCI / controller registers) regardless of ACPI, so this feature
> is kind of redundant.

Ok, that is the problem.
If using _GTF you won't come around also using _STM/_GTM.
We already have libata-acpi patches in our 2.6.16 kernel which have
_STM/_GTM support.
AFAIK those come from Hannes who also posted this some time ago
(to some ide-xy mailinglist, don't know)?
You may want to wait for his answer, there already exist stuff doing
this and as code is in our kernels it also should be rather well
tested...

    Thomas



> 2. Doing _GTF on boot.  _GTF is supposed to configure the device as the
> firmware would have configured it during a normal boot, so we shouldn't
> be doing it during boot.  This too is in gray area as if we're doing
> kexec, we might want to do _GTF during boot.
> 
> It would be the cleanest if _GTF can be modified by but doesn't depend
> on _STM.  Oh, well, there seem to be enough motherboards out there hit
> by this.  I'll cook something up.


-
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux