• Uma Shankar's avatar
    drm/i915: Lower RM timeout to avoid DSI hard hangs · 1d85a299
    Uma Shankar authored
    In BXT/APL, device 2 MMIO reads from MIPI controller requires its PLL
    to be turned ON. When MIPI PLL is turned off (MIPI Display is not
    active or connected), and someone (host or GT engine) tries to read
    MIPI registers, it causes hard hang. This is a hardware restriction
    or limitation.
    
    Driver by itself doesn't read MIPI registers when MIPI display is off.
    But any userspace application can submit unprivileged batch buffer for
    execution. In that batch buffer there can be mmio reads. And these
    reads are allowed even for unprivileged applications. If these
    register reads are for MIPI DSI controller and MIPI display is not
    active during that time, then the MMIO read operation causes system
    hard hang and only way to recover is hard reboot. A genuine
    process/application won't submit batch buffer like this and doesn't
    cause any issue. But on a compromised system, a malign userspace
    process/app can generate such batch buffer and can trigger system
    hard hang (denial of service attack).
    
    The fix is to lower the internal MMIO timeout value to an optimum
    value of 950us as recommended by hardware team. If the timeout is
    beyond 1ms (which will hit for any value we choose if MMIO READ on a
    DSI specific register is performed without PLL ON), it causes the
    system hang. But if the timeout value is lower than it will be below
    the threshold (even if timeout happens) and system will not get into
    a hung state. This will avoid a system hang without losing any
    programming or GT interrupts, taking the worst case of lowest CDCLK
    frequency and early DC5 abort into account.
    Signed-off-by: default avatarUma Shankar <uma.shankar@intel.com>
    Reviewed-by: default avatarJon Bloomfield <jon.bloomfield@intel.com>
    1d85a299
intel_pm.c 286 KB