From patchwork Wed Feb 17 17:03:35 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jani Nikula X-Patchwork-Id: 12091925 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1B845C433DB for ; Wed, 17 Feb 2021 17:04:30 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C1C0C64DF0 for ; Wed, 17 Feb 2021 17:04:29 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C1C0C64DF0 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 738BB6E595; Wed, 17 Feb 2021 17:04:29 +0000 (UTC) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 83A726E595 for ; Wed, 17 Feb 2021 17:04:28 +0000 (UTC) IronPort-SDR: 1y0ffhTJN8lm39ws40v21j/L5g+lUzuJf6q1Niou5gdPCMbofu44yV6AfGj/oZWbY20jUx4xfU WzBI93O3DU0w== X-IronPort-AV: E=McAfee;i="6000,8403,9898"; a="244717710" X-IronPort-AV: E=Sophos;i="5.81,184,1610438400"; d="scan'208";a="244717710" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Feb 2021 09:04:18 -0800 IronPort-SDR: SW6drGEKs5E0bFhEAk16nq82YR1k18A1ASRqflQVRYY8z6kXxaHOcwKVfLWB3Q0aGhBX3clhoQ 89wORK0WF9gA== X-IronPort-AV: E=Sophos;i="5.81,184,1610438400"; d="scan'208";a="427559428" Received: from mvalka-mobl1.ger.corp.intel.com (HELO localhost) ([10.252.39.140]) by fmsmga002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Feb 2021 09:04:16 -0800 From: Jani Nikula To: intel-gfx@lists.freedesktop.org Date: Wed, 17 Feb 2021 19:03:35 +0200 Message-Id: <23911ee2dee946211f180ac92512ccbb87bbfcfe.1613580193.git.jani.nikula@intel.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: References: MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH 05/12] drm/i915/bios: create fake child devices on missing VBT X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: jani.nikula@intel.com, Lucas De Marchi Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Instead of initialing data directly in ddi_port_info array, create fake child devices for default outputs when the VBT is missing. This makes further unification of output handling easier. This will make intel_bios_is_port_present() return true for the fake child devices. This may cause subtle changes in a handful of places. Cc: Lucas De Marchi Cc: Ville Syrjälä Signed-off-by: Jani Nikula Reviewed-by: Lucas De Marchi --- drivers/gpu/drm/i915/display/intel_bios.c | 47 ++++++++++++++++++----- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c index b9d99324d66d..59d315b395c2 100644 --- a/drivers/gpu/drm/i915/display/intel_bios.c +++ b/drivers/gpu/drm/i915/display/intel_bios.c @@ -2063,8 +2063,8 @@ init_vbt_missing_defaults(struct drm_i915_private *i915) return; for_each_port_masked(port, ports) { - struct ddi_vbt_port_info *info = - &i915->vbt.ddi_port_info[port]; + struct display_device_data *devdata; + struct child_device_config *child; enum phy phy = intel_port_to_phy(i915, port); /* @@ -2074,11 +2074,38 @@ init_vbt_missing_defaults(struct drm_i915_private *i915) if (intel_phy_is_tc(i915, phy)) continue; - info->supports_dvi = (port != PORT_A && port != PORT_E); - info->supports_hdmi = info->supports_dvi; - info->supports_dp = (port != PORT_E); - info->supports_edp = (port == PORT_A); + /* Create fake child device config */ + devdata = kzalloc(sizeof(*devdata), GFP_KERNEL); + if (!devdata) + break; + + child = &devdata->child; + + if (port == PORT_F) + child->dvo_port = DVO_PORT_HDMIF; + else if (port == PORT_E) + child->dvo_port = DVO_PORT_HDMIE; + else + child->dvo_port = DVO_PORT_HDMIA + port; + + if (port != PORT_A && port != PORT_E) + child->device_type |= DEVICE_TYPE_TMDS_DVI_SIGNALING; + + if (port != PORT_E) + child->device_type |= DEVICE_TYPE_DISPLAYPORT_OUTPUT; + + if (port == PORT_A) + child->device_type |= DEVICE_TYPE_INTERNAL_CONNECTOR; + + list_add_tail(&devdata->node, &i915->vbt.display_devices); + + drm_dbg_kms(&i915->drm, + "Generating default VBT child device with type 0x04%x on port %c\n", + child->device_type, port_name(port)); } + + /* Bypass some minimum baseline VBT version checks */ + i915->vbt.version = 155; } static const struct bdb_header *get_bdb_header(const struct vbt_header *vbt) @@ -2255,10 +2282,6 @@ void intel_bios_init(struct drm_i915_private *i915) /* Depends on child device list */ parse_compression_parameters(i915, bdb); - /* Further processing on pre-parsed data */ - parse_sdvo_device_mapping(i915); - parse_ddi_ports(i915); - out: if (!vbt) { drm_info(&i915->drm, @@ -2266,6 +2289,10 @@ void intel_bios_init(struct drm_i915_private *i915) init_vbt_missing_defaults(i915); } + /* Further processing on pre-parsed or generated child device data */ + parse_sdvo_device_mapping(i915); + parse_ddi_ports(i915); + kfree(oprom_vbt); }