RE: Fw: ata-piix ACPI errors

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

 



Here is the key phrase from the ACPI spec. It is not perfectly clear,
but it is my understanding that the meaning is that _GTF can only be
called after _STM has been called.

Bob


9.9.1.1   _GTF (Get Task File)
...

This Control Method is listed under each drive device object. _GTF must
be called after calling _STM.



> -----Original Message-----
> From: linux-acpi-owner@xxxxxxxxxxxxxxx [mailto:linux-acpi-
> owner@xxxxxxxxxxxxxxx] On Behalf Of Thomas Renninger
> Sent: Thursday, March 01, 2007 1:58 AM
> To: Tejun Heo
> Cc: Andrew Morton; linux-acpi@xxxxxxxxxxxxxxx; Meelis Roos; Adrian
Bunk;
> Hannes Reinecke
> Subject: Re: Fw: ata-piix ACPI errors
> 
> 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
-
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