Received: by 2002:a05:6520:1682:b0:147:d1a0:b502 with SMTP id ck2csp5596121lkb; Mon, 11 Oct 2021 09:38:30 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwxM2ARrHSMngCOz2kgBOURwpxrEXaxRBU9KqKW3A5qEHIw7trnETpLtA4f8FoWpGwKvQqw X-Received: by 2002:a17:90b:694:: with SMTP id m20mr25306pjz.160.1633970310616; Mon, 11 Oct 2021 09:38:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1633970310; cv=none; d=google.com; s=arc-20160816; b=ZKqFImb4HVIdAsqvJ9A5x4Ptax8FbP3M8RO2YONuYuVmMugRcSCAhOZR4IDlAIGwmK +F8BKtpaFdHBng58VWlto9An5COhJu/jXy0j51ccmHXik7/zrgvVdMm6sDq59wmSK6JE sPs0crQrH7CngvMBPVgZl+BvpLlO7y31CsUfPNGwnjknL7cyIMGL5emoLI+bq5i3+WEB IeYpgpqZB5sceTup7qXMfcxMCIFcCUuuFObMHDWdw96oqYE5yDn4l8jHatOKPEd6hrin /TU5N/hZ7sPafyQoWzsppZHIbHqYUqGUOA6TvuKeDa3YOMC3bUmBcyziGxTTZBvD47yK PZbg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=mx3izuRSjrzwWxXpPRGchLy5xtb8x7Qlc1dhwhraK+g=; b=koLInAMhi6VRJcElRQPB+AIym+UVrBN9dNzePX6WQ8qI1XZOe9nJYeYdRBjU48OS1+ eytESYRjvUfIELCwjjRbUwxetxe7Pb/JGK5JG/nUaiHxaRilaCIACYhP9eYklfc/j/x/ y4LwioDS4Uxqmv3M1D/r9Ms6CNMQ68vKLuxtLEl8Hmx8FxXUYdkiJBM39Gvx0/75+oYE /VnvSOVsd8vtBzIxQlPlyT+/BD6zjtuJr5jbLjbFkcCoYu7hNJ9RD7WrxIleZ0TvkAah kriSjTZAG9F3D/zopCtp2CHtleTa8crcYRtkNwTzR+8iYm859GmUhT8mn6ymKEpZW2TG fuHA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=oPhr7hel; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id l62si12558046pge.621.2021.10.11.09.38.16; Mon, 11 Oct 2021 09:38:30 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=oPhr7hel; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245164AbhJKOT6 (ORCPT + 99 others); Mon, 11 Oct 2021 10:19:58 -0400 Received: from mail.kernel.org ([198.145.29.99]:38590 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243246AbhJKORS (ORCPT ); Mon, 11 Oct 2021 10:17:18 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 3275A60E74; Mon, 11 Oct 2021 14:10:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1633961409; bh=2Uizkls3Ogb2nJx7RLxry1IbAk/+co37me2s+vYy/yM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=oPhr7hel00zHOhmVFeRluh5KIuFUMog3yIveoRAqiVY3OCKEHA9mY2eYDJm6rCeMf 0gxw/A4RZM9tUoMgj9T2ioEz9tWSLcdPgC+eUTWfptswkzhMx80wZ4JFJu/TIDkYCw pqhwgmWdnzBt37tMplUBJqEZL6UCwd08Qo/RYeLo= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Tejas Upadhyay , Imre Deak , Maarten Lankhorst , Sasha Levin Subject: [PATCH 5.14 083/151] drm/i915/jsl: Add W/A 1409054076 for JSL Date: Mon, 11 Oct 2021 15:45:55 +0200 Message-Id: <20211011134520.528122802@linuxfoundation.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20211011134517.833565002@linuxfoundation.org> References: <20211011134517.833565002@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Tejas Upadhyay [ Upstream commit 544021e3f2aa3c4c6c5aabc58907e8bab69b3762 ] When pipe A is disabled and MIPI DSI is enabled on pipe B, the AMT KVMR feature will incorrectly see pipe A as enabled. Set 0x42080 bit 23=1 before enabling DSI on pipe B and leave it set while DSI is enabled on pipe B. No impact to setting it all the time. Changes since V5: - Added reviewed-by - Removed redundant braces and debug message format - Imre Changes since V4: - Modified function comment Wa_:icl,jsl,ehl - Lucas - Modified debug message in sync state - Imre Changes since V3: - More meaningful name to workaround - Imre - Remove boolean check clear flag - Add WA_verify hook in dsi sync_state Changes since V2: - Used REG_BIT, ignored pipe A and used sw state check - Jani - Made function wrapper - Jani Changes since V1: - ./dim checkpatch errors addressed Signed-off-by: Tejas Upadhyay Reviewed-by: Imre Deak Signed-off-by: Maarten Lankhorst Link: https://patchwork.freedesktop.org/patch/msgid/20210615105613.851491-1-tejaskumarx.surendrakumar.upadhyay@intel.com Signed-off-by: Sasha Levin --- drivers/gpu/drm/i915/display/icl_dsi.c | 42 ++++++++++++++++++++++++++ drivers/gpu/drm/i915/i915_reg.h | 1 + 2 files changed, 43 insertions(+) diff --git a/drivers/gpu/drm/i915/display/icl_dsi.c b/drivers/gpu/drm/i915/display/icl_dsi.c index 16812488c5dd..970ba9e7f84e 100644 --- a/drivers/gpu/drm/i915/display/icl_dsi.c +++ b/drivers/gpu/drm/i915/display/icl_dsi.c @@ -1253,15 +1253,36 @@ static void gen11_dsi_pre_enable(struct intel_atomic_state *state, gen11_dsi_set_transcoder_timings(encoder, pipe_config); } +/* + * Wa_1409054076:icl,jsl,ehl + * When pipe A is disabled and MIPI DSI is enabled on pipe B, + * the AMT KVMR feature will incorrectly see pipe A as enabled. + * Set 0x42080 bit 23=1 before enabling DSI on pipe B and leave + * it set while DSI is enabled on pipe B + */ +static void icl_apply_kvmr_pipe_a_wa(struct intel_encoder *encoder, + enum pipe pipe, bool enable) +{ + struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); + + if (DISPLAY_VER(dev_priv) == 11 && pipe == PIPE_B) + intel_de_rmw(dev_priv, CHICKEN_PAR1_1, + IGNORE_KVMR_PIPE_A, + enable ? IGNORE_KVMR_PIPE_A : 0); +} static void gen11_dsi_enable(struct intel_atomic_state *state, struct intel_encoder *encoder, const struct intel_crtc_state *crtc_state, const struct drm_connector_state *conn_state) { struct intel_dsi *intel_dsi = enc_to_intel_dsi(encoder); + struct intel_crtc *crtc = to_intel_crtc(conn_state->crtc); drm_WARN_ON(state->base.dev, crtc_state->has_pch_encoder); + /* Wa_1409054076:icl,jsl,ehl */ + icl_apply_kvmr_pipe_a_wa(encoder, crtc->pipe, true); + /* step6d: enable dsi transcoder */ gen11_dsi_enable_transcoder(encoder); @@ -1415,6 +1436,7 @@ static void gen11_dsi_disable(struct intel_atomic_state *state, const struct drm_connector_state *old_conn_state) { struct intel_dsi *intel_dsi = enc_to_intel_dsi(encoder); + struct intel_crtc *crtc = to_intel_crtc(old_conn_state->crtc); /* step1: turn off backlight */ intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_BACKLIGHT_OFF); @@ -1423,6 +1445,9 @@ static void gen11_dsi_disable(struct intel_atomic_state *state, /* step2d,e: disable transcoder and wait */ gen11_dsi_disable_transcoder(encoder); + /* Wa_1409054076:icl,jsl,ehl */ + icl_apply_kvmr_pipe_a_wa(encoder, crtc->pipe, false); + /* step2f,g: powerdown panel */ gen11_dsi_powerdown_panel(encoder); @@ -1548,6 +1573,22 @@ static void gen11_dsi_get_config(struct intel_encoder *encoder, pipe_config->mode_flags |= I915_MODE_FLAG_DSI_PERIODIC_CMD_MODE; } +static void gen11_dsi_sync_state(struct intel_encoder *encoder, + const struct intel_crtc_state *crtc_state) +{ + struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); + struct intel_crtc *intel_crtc = to_intel_crtc(crtc_state->uapi.crtc); + enum pipe pipe = intel_crtc->pipe; + + /* wa verify 1409054076:icl,jsl,ehl */ + if (DISPLAY_VER(dev_priv) == 11 && pipe == PIPE_B && + !(intel_de_read(dev_priv, CHICKEN_PAR1_1) & IGNORE_KVMR_PIPE_A)) + drm_dbg_kms(&dev_priv->drm, + "[ENCODER:%d:%s] BIOS left IGNORE_KVMR_PIPE_A cleared with pipe B enabled\n", + encoder->base.base.id, + encoder->base.name); +} + static int gen11_dsi_dsc_compute_config(struct intel_encoder *encoder, struct intel_crtc_state *crtc_state) { @@ -1966,6 +2007,7 @@ void icl_dsi_init(struct drm_i915_private *dev_priv) encoder->post_disable = gen11_dsi_post_disable; encoder->port = port; encoder->get_config = gen11_dsi_get_config; + encoder->sync_state = gen11_dsi_sync_state; encoder->update_pipe = intel_panel_update_backlight; encoder->compute_config = gen11_dsi_compute_config; encoder->get_hw_state = gen11_dsi_get_hw_state; diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index 7dc58ad08fbb..5aa5ddefd22d 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h @@ -8113,6 +8113,7 @@ enum { # define CHICKEN3_DGMG_DONE_FIX_DISABLE (1 << 2) #define CHICKEN_PAR1_1 _MMIO(0x42080) +#define IGNORE_KVMR_PIPE_A REG_BIT(23) #define KBL_ARB_FILL_SPARE_22 REG_BIT(22) #define DIS_RAM_BYPASS_PSR2_MAN_TRACK (1 << 16) #define SKL_DE_COMPRESSED_HASH_MODE (1 << 15) -- 2.33.0