• Hans de Goede's avatar
    drm/i915: Listen for PMIC bus access notifications · 264ec1a8
    Hans de Goede authored
    Listen for PMIC bus access notifications and get FORCEWAKE_ALL while
    the bus is accessed to avoid needing to do any forcewakes, which need
    PMIC bus access, while the PMIC bus is busy:
    
    This fixes errors like these showing up in dmesg, usually followed
    by a gfx or system freeze:
    
    [drm:fw_domains_get [i915]] *ERROR* render: timed out waiting for forcewake ack request.
    [drm:fw_domains_get [i915]] *MEDIA* render: timed out waiting for forcewake ack request.
    i2c_designware 808622C1:06: punit semaphore timed out, resetting
    i2c_designware 808622C1:06: PUNIT SEM: 2
    i2c_designware 808622C1:06: couldn't acquire bus ownership
    
    Downside of this approach is that it causes wakeups whenever the PMIC
    bus is accessed. Unfortunately we cannot simply wait for the PMIC bus
    to go idle when we hit a race, as forcewakes may be done from interrupt
    handlers where we cannot sleep to wait for the i2c PMIC bus access to
    finish.
    
    Note that the notifications and thus the wakeups will only happen on
    baytrail / cherrytrail devices using PMICs with a shared i2c bus for
    P-Unit and host PMIC access (i2c busses with a _SEM method in their
    APCI node), e.g. an axp288 PMIC.
    
    I plan to write some patches for drivers accessing the PMIC bus to
    limit their bus accesses to a bare minimum (e.g. cache registers, do not
    update battery level more often then 4 times a minute), to limit the
    amount of wakeups.
    
    BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=155241Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
    Tested-by: default avatartagorereddy <tagore.chandan@gmail.com>
    Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    [danvet: Wiggle in conflicts.]
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    264ec1a8
intel_uncore.c 55.6 KB