Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp13926606pxu; Mon, 4 Jan 2021 08:09:16 -0800 (PST) X-Google-Smtp-Source: ABdhPJwo11hsPcH8GySfNSqfz40Sag5J6JD/UNmDsiSorvdFLTzyI0AEnyuFJb53+YXClCqWhGEq X-Received: by 2002:aa7:c802:: with SMTP id a2mr17177801edt.120.1609776556439; Mon, 04 Jan 2021 08:09:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1609776556; cv=none; d=google.com; s=arc-20160816; b=ANvgEDrB2EFgecAo9ff5heRxCNFl7g8+jlIUV28nQFyhuv7EVPjVJVgsE/O9If0fW9 e6OI6D7L3TfB2teM5mv0ggmAc6OjIq+b7hPudn1mm5DE2V09baRP1BU3jTeYuicrg6m7 7mgDBtzliE62Bxa6uXavTVYidOhHPB4BnMKdVqDyisMaXU79Ha+QY67GTNQrcCq4ujaW TmY2zRox4P+BDFhaGTrI+A0DJwCfZqMHZ2rrS4fJ+OWCOSaI53Hq0uuLdD8Q1+0MLfHB n0vCQa2FmkUTtsttkxnuEYkOjX2i1Ogz+ltzr3PpxuSnNf+WSZP4F2Iha9Jw33USQJup cLcg== 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=i9xwkzRp+1Fbzo7ZpJAeQlOiumjq6GiU/YdEIx8zTvA=; b=i6IHu7iVtPlHGn9ky0LAaE7dh8EUh6ywJ2YrwZTt58NqUQhPVYl4+HA7AKUGyK8DEb 0D6fN9RvefsopuqQI1E0erBhfRgkEnwymH7J2KdWG+HTK8yYWtIVGXHxuT5TdE48jh8D GerNMlpPhDDwL6dk+ABDBCVe3S8MBj41XiSLJoOVYzQIkh8AVzaK4f8zMqoEi06xPEyM xktZTiWGkxIAX5a5eoSri47vQJNisi36ZUHC+Fer5MaUbj+1fYUvSZElpSrGH6QhAuMA 4j/OJb1rBlDybVw4FDCgyZsfGKq4lAGeHBQwlXDlfodw1CFrQYELJtDKJlqrtbT8zbky oOew== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=Z9YT+d9O; 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 w2si29756191edx.591.2021.01.04.08.08.53; Mon, 04 Jan 2021 08:09:16 -0800 (PST) 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=Z9YT+d9O; 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 S1728953AbhADQC5 (ORCPT + 99 others); Mon, 4 Jan 2021 11:02:57 -0500 Received: from mail.kernel.org ([198.145.29.99]:40326 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728143AbhADQCy (ORCPT ); Mon, 4 Jan 2021 11:02:54 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id 67AD421D93; Mon, 4 Jan 2021 16:02:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1609776133; bh=CBrCcxd2iSOW3OMTBf9Xm+XbcFbP/662zUbb0baLBUk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Z9YT+d9OKlSdn/yZP0I/OqigjqQEzFzdPYJPB/12498bSGTgBwJ0TsyZDkAA3Q2r1 hUZWNyNIf2435ak+Iapa9uFKGFmT0h78mFncDuRAvbW1RFwMTQaE2gcl9v4fFDvONn 13z/NAXZfzWE1d5epKjsCqorMD79oCxfGKZod2gw= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Alex Deucher , Borislav Petkov , Harry Wentland , Nicholas Kazlauskas , Chiawen Huang , Rodrigo Siqueira , Borislav Petkov Subject: [PATCH 5.10 06/63] drm/amd/display: Add get_dig_frontend implementation for DCEx Date: Mon, 4 Jan 2021 16:56:59 +0100 Message-Id: <20210104155709.116957895@linuxfoundation.org> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210104155708.800470590@linuxfoundation.org> References: <20210104155708.800470590@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: Rodrigo Siqueira commit 6bdeff12a96c9a5da95c8d11fefd145eb165e32a upstream. Some old ASICs might not implement/require get_dig_frontend helper; in this scenario, we can have a NULL pointer exception when we try to call it inside vbios disable operation. For example, this situation might happen when using Polaris12 with an eDP panel. This commit avoids this situation by adding a specific get_dig_frontend implementation for DCEx. Cc: Alex Deucher Cc: Borislav Petkov Cc: Harry Wentland Cc: Nicholas Kazlauskas Cc: Chiawen Huang Reported-and-tested-by: Borislav Petkov Acked-by: Alex Deucher Signed-off-by: Rodrigo Siqueira Signed-off-by: Alex Deucher Cc: stable@vger.kernel.org Signed-off-by: Greg Kroah-Hartman --- drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.c | 44 +++++++++++++++++- drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.h | 2 2 files changed, 44 insertions(+), 2 deletions(-) --- a/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.c +++ b/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.c @@ -119,7 +119,8 @@ static const struct link_encoder_funcs d .disable_hpd = dce110_link_encoder_disable_hpd, .is_dig_enabled = dce110_is_dig_enabled, .destroy = dce110_link_encoder_destroy, - .get_max_link_cap = dce110_link_encoder_get_max_link_cap + .get_max_link_cap = dce110_link_encoder_get_max_link_cap, + .get_dig_frontend = dce110_get_dig_frontend, }; static enum bp_result link_transmitter_control( @@ -235,6 +236,44 @@ static void set_link_training_complete( } +unsigned int dce110_get_dig_frontend(struct link_encoder *enc) +{ + struct dce110_link_encoder *enc110 = TO_DCE110_LINK_ENC(enc); + u32 value; + enum engine_id result; + + REG_GET(DIG_BE_CNTL, DIG_FE_SOURCE_SELECT, &value); + + switch (value) { + case DCE110_DIG_FE_SOURCE_SELECT_DIGA: + result = ENGINE_ID_DIGA; + break; + case DCE110_DIG_FE_SOURCE_SELECT_DIGB: + result = ENGINE_ID_DIGB; + break; + case DCE110_DIG_FE_SOURCE_SELECT_DIGC: + result = ENGINE_ID_DIGC; + break; + case DCE110_DIG_FE_SOURCE_SELECT_DIGD: + result = ENGINE_ID_DIGD; + break; + case DCE110_DIG_FE_SOURCE_SELECT_DIGE: + result = ENGINE_ID_DIGE; + break; + case DCE110_DIG_FE_SOURCE_SELECT_DIGF: + result = ENGINE_ID_DIGF; + break; + case DCE110_DIG_FE_SOURCE_SELECT_DIGG: + result = ENGINE_ID_DIGG; + break; + default: + // invalid source select DIG + result = ENGINE_ID_UNKNOWN; + } + + return result; +} + void dce110_link_encoder_set_dp_phy_pattern_training_pattern( struct link_encoder *enc, uint32_t index) @@ -1665,7 +1704,8 @@ static const struct link_encoder_funcs d .disable_hpd = dce110_link_encoder_disable_hpd, .is_dig_enabled = dce110_is_dig_enabled, .destroy = dce110_link_encoder_destroy, - .get_max_link_cap = dce110_link_encoder_get_max_link_cap + .get_max_link_cap = dce110_link_encoder_get_max_link_cap, + .get_dig_frontend = dce110_get_dig_frontend }; void dce60_link_encoder_construct( --- a/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.h +++ b/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.h @@ -295,6 +295,8 @@ void dce110_link_encoder_connect_dig_be_ enum engine_id engine, bool connect); +unsigned int dce110_get_dig_frontend(struct link_encoder *enc); + void dce110_link_encoder_set_dp_phy_pattern_training_pattern( struct link_encoder *enc, uint32_t index);