• Len Brown's avatar
    ACPI idle: permit sparse C-state sub-state numbers · 414a72c0
    Len Brown authored
    commit 2194324d upstream.
    
    Linux uses CPUID.MWAIT.EDX to validate the C-states
    reported by ACPI, silently discarding states which
    are not supported by the HW.
    
    This test is too restrictive, as some HW now uses
    sparse sub-state numbering, so the sub-state number
    may be higher than the number of sub-states...
    
    Also, rather than silently ignoring an invalid state,
    we should complain about a firmware bug.
    
    In practice...
    
    Bay Trail systems originally supported C6-no-shrink as
    MWAIT sub-state 0x58, and in CPUID.MWAIT.EDX 0x03000000
    indicated that there were 3 MWAIT-C6 sub-states.
    So acpi_idle would discard that C-state because 8 >= 3.
    
    Upon discovering this issue, the ucode was updated so that
    C6-no-shrink was also exported as 0x51, and the BIOS was
    updated to match.  However, systems shipped with 0x58,
    will never get a BIOS update, and this patch allows
    Linux to see C6-no-shrink on early Bay Trail.
    Signed-off-by: default avatarLen Brown <len.brown@intel.com>
    Signed-off-by: default avatarJiri Slaby <jslaby@suse.cz>
    414a72c0
cstate.c 5.73 KB