3 Replies Latest reply on May 6, 2014 9:04 AM by LynnZ

    iASL (20140424) FPDT support not right ?

    Community Member

      It appears to me that the iASL 20140424 isn't properly handling the ACPI FPDT table.

      The following information is the information that has lead me to the above conclusion.

       

      This is my fist time looking at the FPDT table and would like some verification of my understanding and findings.

       

      The AMI APTIO BIOS I'm working with has a FPDT table in the ACPI. When I use iASL to decompile the table I get an error that the table terminates in the middle of a data structure. When I have iASL generate a FPDT template file I see that the lengths of subtable type 0x0000 are different between the two.

       

      Digging through the ACPI 5.0 spec it appears to me that the BIOS is correct and that iASL is making an illegal FPDT table template with the corresponding problem compiling and decompiling the BIOS table.

       

      The ACPI 5.0 spec (5.2.23) covers the FPDT. That section is very, IMO, poorly organized which I believe has contributed to the problem in iASL. Table 5-101 shows that there are two active subtable types 0x0000 (Basic Boot Performance Pointer Record) and 0x0001 (S3 Performance Table Pointer Record).

       

      The "Basic Boot Performance Pointer Record", subtype 0x0000, structure is detailed in table 5-104 and is 16 bytes in size (which is incorrectly labeled "S4 Performance Table Record Pointer" given the record type in the table is "Firmware Basic Boot Performance Pointer Record"). iASL in the generated template has a length of 48 (0x30) for this subtype.

       

      The "S3 Performance Table Pointer Record", subtype 0x0001, structure is detailed in table 5-103 and is 16 bytes in size.

       

      RW-Everything is interpreting the same as what my understanding of the ACPI spec.

       

      • Here's what RW-Everything shows for the table.

      Firmware Performance Data Table: 0x00000000DB908FD0

       

      46 50 44 54 44 00 00 00 01 79 50 58 43 49 50 43 FPDTD....yPXCIPC

      50 58 43 5F 43 49 53 5F 09 20 07 01 41 4D 49 20 PXC_CIS_. ..AMI

      13 00 01 00 01 00 10 01 00 00 00 00 18 C0 F0 DB ................

      00 00 00 00 00 00 10 01 00 00 00 00 38 C0 F0 DB ............8...

      00 00 00 00                                     ....           

       

      Signature "FPDT"

      Length 0x00000044 (68)

      Revision 0x01 (1)

      Checksum 0x79 (121)

      OEM ID "PXCIPC"

      OEM Table ID "PXC_CIS_"

      OEM Revision 0x01072009 (17244169)

      Creator ID "AMI "

      Creator Revision 0x00010013 (65555)

      Performance Records

        S3 Performance Table Pointer Record

          Record Type 0x0001 (1)

          Record Length 0x10 (16)

          Revision 0x01 (1)

          Reserved 0x00000000

          S3PT Pointer 0x00000000DBF0C018

            ...

        S4 Performance Table Pointer Record

          Record Type 0x0000 (0)

          Record Length 0x10 (16)

          Revision 0x01 (1)

          Reserved 0x00000000

          FBPT Pointer 0x00000000DBF0C038

            ...

      • Here's the iASL decompile of the table shown above.

      /*

      * Intel ACPI Component Architecture

      * AML Disassembler version 20140424-32 [Apr 24 2014]

      * Copyright (c) 2000 - 2014 Intel Corporation

      *

      * Disassembly of DB908FD0_FPDT.bin, Wed Apr 30 09:39:53 2014

      *

      * ACPI Data Table [FPDT]

      *

      * Format: [HexOffset DecimalOffset ByteLength]  FieldName : FieldValue

      */

       

      [000h 0000   4]                    Signature : "FPDT"    [Firmware Performance Data Table]

      [004h 0004   4]                 Table Length : 00000044

      [008h 0008   1]                     Revision : 01

      [009h 0009   1]                     Checksum : 79

      [00Ah 0010   6]                       Oem ID : "PXCIPC"

      [010h 0016   8]                 Oem Table ID : "PXC_CIS_"

      [018h 0024   4]                 Oem Revision : 01072009

      [01Ch 0028   4]              Asl Compiler ID : "AMI "

      [020h 0032   4]        Asl Compiler Revision : 00010013

       

      [024h 0036   2]                Subtable Type : 0001

      [026h 0038   1]                       Length : 10

      [027h 0039   1]                     Revision : 01

      [028h 0040   4]                     Reserved : 00000000

      [02Ch 0044   8]                 S3PT Address : 00000000DBF0C018

       

      [034h 0052   2]                Subtable Type : 0000

      [036h 0054   1]                       Length : 10

      [037h 0055   1]                     Revision : 01

      [038h 0056   4]                     Reserved : 00000000

      [03Ch 0060   8]                    Reset End : 00000000DBF0C038

      **** ACPI table terminates in the middle of a data structure!

       

      Raw Table Data: Length 68 (0x44)

        0000: 46 50 44 54 44 00 00 00 01 79 50 58 43 49 50 43  FPDTD....yPXCIPC

        0010: 50 58 43 5F 43 49 53 5F 09 20 07 01 41 4D 49 20  PXC_CIS_. ..AMI

        0020: 13 00 01 00 01 00 10 01 00 00 00 00 18 C0 F0 DB  ................

        0030: 00 00 00 00 00 00 10 01 00 00 00 00 38 C0 F0 DB  ............8...

        0040: 00 00 00 00                                      ....

       

      • Here's the template FPDT generated from iASL

      /*

      * Intel ACPI Component Architecture

      * iASL Compiler/Disassembler version 20140424-32 [Apr 24 2014]

      * Copyright (c) 2000 - 2014 Intel Corporation

      *

      * Template for [FPDT] ACPI Table

      * Format: [ByteLength]  FieldName : HexFieldValue

      */

       

      [0004]                          Signature : "FPDT"    [Firmware Performance Data Table]

      [0004]                       Table Length : 00000064

      [0001]                           Revision : 01

      [0001]                           Checksum : BD

      [0006]                             Oem ID : "INTEL "

      [0008]                       Oem Table ID : "TEMPLATE"

      [0004]                       Oem Revision : 00000001

      [0004]                    Asl Compiler ID : "INTL"

      [0004]              Asl Compiler Revision : 20110804

       

      [0002]                      Subtable Type : 0000

      [0001]                             Length : 30

      [0001]                           Revision : 01

      [0004]                           Reserved : 00000000

      [0008]                          Reset End : 0000000000000000

      [0008]                   Load Image Start : 0000000000000000

      [0008]                  Start Image Start : 0000000000000000

      [0008]                Exit Services Entry : 0000000000000000

      [0008]                 Exit Services Exit : 0000000000000000

       

      [0002]                      Subtable Type : 0001

      [0001]                             Length : 10

      [0001]                           Revision : 01

      [0004]                           Reserved : 00000000

      [0008]                       S3PT Address : 0000000000000000

        • Re: iASL (20140424) FPDT support not right ?
          Community Member

          I should mention that the iASL generated template subtype 0x0000 with a length of 0x30 corresponds to the structure shown in Table 5-109 which is described in section 5.2.23.7 as a record in a table that resides outside the FPDT table.

            • Re: iASL (20140424) FPDT support not right ?
              LynnZ Brown Belt

              Hello!  We are looking into this for you.  There has been a delay due to some holidays, but I wanted you to know that we will address this as soon as possible.  Lynn

                • Re: iASL (20140424) FPDT support not right ?
                  LynnZ Brown Belt

                  Thank you for your posting. We will pass your findings on to our BIOS team. As BIOS code is the responsibility of each board manufacturer to provide or purchases a BIOS code based off a given BIOS vendor’s code it is the
                  board manufacturer responsibility to make sure all code is verified on their platform.  We encourage customers to contact their board manufacturer and report issues to a specific platform or code base.  If the board manufacture determines an issue with their platform, they will work with Intel on a resolution.