• Al Stone's avatar
    mailbox: PCC: erroneous error message when parsing ACPI PCCT · 8f8027c5
    Al Stone authored
    There have been multiple reports of the following error message:
    
    [    0.068293] Error parsing PCC subspaces from PCCT
    
    This error message is not correct.  In multiple cases examined, the PCCT
    (Platform Communications Channel Table) concerned is actually properly
    constructed; the problem is that acpi_pcc_probe() which reads the PCCT
    is making the assumption that the only valid PCCT is one that contains
    subtables of one of two types: ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE or
    ACPI_PCCT_TYPE_HW_REDUCED_TYPE2.  The number of subtables of these
    types are counted and as long as there is at least one of the desired
    types, the acpi_pcc_probe() succeeds.  When no subtables of these types
    are found, regardless of whether or not any other subtable types are
    present, the error mentioned above is reported.
    
    In the cases reported to me personally, the PCCT contains exactly one
    subtable of type ACPI_PCCT_TYPE_GENERIC_SUBSPACE.  The function
    acpi_pcc_probe() does not count it as a valid subtable, so believes
    there to be no valid subtables, and hence outputs the error message.
    
    An example of the PCCT being reported as erroneous yet perfectly fine
    is the following:
    
                        Signature : "PCCT"
                     Table Length : 0000006E
                         Revision : 05
                         Checksum : A9
                           Oem ID : "XXXXXX"
                     Oem Table ID : "XXXXX   "
                     Oem Revision : 00002280
                  Asl Compiler ID : "XXXX"
            Asl Compiler Revision : 00000002
    
            Flags (decoded below) : 00000001
                         Platform : 1
                         Reserved : 0000000000000000
    
                    Subtable Type : 00 [Generic Communications Subspace]
                           Length : 3E
    
                         Reserved : 000000000000
                     Base Address : 00000000DCE43018
                   Address Length : 0000000000001000
    
                Doorbell Register : [Generic Address Structure]
                         Space ID : 01 [SystemIO]
                        Bit Width : 08
                       Bit Offset : 00
             Encoded Access Width : 01 [Byte Access:8]
                          Address : 0000000000001842
    
                    Preserve Mask : 00000000000000FD
                       Write Mask : 0000000000000002
                  Command Latency : 00001388
              Maximum Access Rate : 00000000
          Minimum Turnaround Time : 0000
    
    To fix this, we count up all of the possible subtable types for the
    PCCT, and only report an error when there are none (which could mean
    either no subtables, or no valid subtables), or there are too many.
    We also change the logic so that if there is a valid subtable, we
    do try to initialize it per the PCCT subtable contents.  This is a
    change in functionality; previously, the probe would have returned
    right after the error message and would not have tried to use any
    other subtable definition.
    
    Tested on my personal laptop which showed the error previously; the
    error message no longer appears and the laptop appears to operate
    normally.
    Signed-off-by: default avatarAl Stone <ahs3@redhat.com>
    Reviewed-by: default avatarPrashanth Prakash <pprakash@codeaurora.org>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    8f8027c5
pcc.c 16.5 KB