• Srinivas Pandruvada's avatar
    thermal: intel: Protect clearing of thermal status bits · 930d06bf
    Srinivas Pandruvada authored
    The clearing of the package thermal status is done by Read-Modify-Write
    operation. This may result in clearing of some new status bits which are
    being or about to be processed.
    
    For example, while clearing of HFI status, after read of thermal status
    register, a new thermal status bit is set by the hardware. But during
    write back, the newly generated status bit will be set to 0 or cleared.
    So, it is not safe to do read-modify-write.
    
    Since thermal status Read-Write bits can be set to only 0 not 1, it is
    safe to set all other bits to 1 which are not getting cleared.
    
    Create a common interface for clearing package thermal status bits. Use
    this interface to replace existing code to clear thermal package status
    bits.
    
    It is safe to call from different CPUs without protection as there is no
    read-modify-write. Also wrmsrl results in just single instruction. For
    example while CPU 0 and CPU 3 are clearing bit 1 and 3 respectively. If
    CPU 3 wins the race, it will write 0x4000aa2, then CPU 1 will write
    0x4000aa8. The bits which are not part of clear are set to 1. The default
    mask for bits, which can be written here is 0x4000aaa.
    Signed-off-by: default avatarSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Reviewed-by: default avatarRicardo Neri <ricardo.neri-calderon@linux.intel.com>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    930d06bf
x86_pkg_temp_thermal.c 13.7 KB