From patchwork Thu Jan 10 15:02:40 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Egbert Eich X-Patchwork-Id: 1960421 Return-Path: X-Original-To: patchwork-intel-gfx@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by patchwork1.kernel.org (Postfix) with ESMTP id D58E93FF0F for ; Thu, 10 Jan 2013 15:04:48 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id AE16FE5ED0 for ; Thu, 10 Jan 2013 07:04:48 -0800 (PST) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by gabe.freedesktop.org (Postfix) with ESMTP id 47AD5E5D01 for ; Thu, 10 Jan 2013 07:04:07 -0800 (PST) Received: from relay1.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id B65C6A3A49; Thu, 10 Jan 2013 16:04:06 +0100 (CET) Received: from sles11.fritz.box (sles11.fritz.box [192.168.178.22]) by debian (Postfix) with ESMTP id D85C9992AC; Thu, 10 Jan 2013 16:04:00 +0100 (CET) From: Egbert Eich To: intel-gfx@lists.freedesktop.org Date: Thu, 10 Jan 2013 10:02:40 -0500 Message-Id: <1357830166-18049-3-git-send-email-eich@suse.de> X-Mailer: git-send-email 1.7.7 In-Reply-To: <1357830166-18049-1-git-send-email-eich@suse.de> References: <1357830166-18049-1-git-send-email-eich@suse.de> Cc: Egbert Eich , Daniel Vetter , Chris Wilson , Rodrigo Vivi Subject: [Intel-gfx] [PATCH 2/8] drm/i915: Set hotplug_supported_flag for all chipset generations. X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: intel-gfx-bounces+patchwork-intel-gfx=patchwork.kernel.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+patchwork-intel-gfx=patchwork.kernel.org@lists.freedesktop.org So far the hotplug_supported_mask in the struct drm_i915_private is only used for pre-Ironlake chipsets. This patch sets up the correct value for all generations. Signed-off-by: Egbert Eich Reviewed-by: Jesse Barnes --- drivers/gpu/drm/i915/i915_drv.h | 4 ++ drivers/gpu/drm/i915/i915_irq.c | 71 +++++++++++++++++++++++++++++++++++++ drivers/gpu/drm/i915/intel_crt.c | 2 +- drivers/gpu/drm/i915/intel_dp.c | 4 +-- drivers/gpu/drm/i915/intel_hdmi.c | 4 +-- drivers/gpu/drm/i915/intel_sdvo.c | 12 +------ 6 files changed, 79 insertions(+), 18 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index eeaf2a8..d7ad677 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -1322,6 +1322,10 @@ extern void intel_irq_init(struct drm_device *dev); extern void intel_gt_init(struct drm_device *dev); extern void intel_gt_reset(struct drm_device *dev); +extern u32 intel_crt_hotplug_int_status(struct drm_device *dev); +extern u32 intel_sdvo_hotplug_int_status(struct drm_device *dev, bool is_sdvo_b); +extern u32 intel_hotplug_int_status(struct drm_device *dev, enum port port); + void i915_error_state_free(struct kref *error_ref); void diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index bb5e6d8..c0e302e 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c @@ -2765,3 +2765,74 @@ void intel_irq_init(struct drm_device *dev) dev->driver->disable_vblank = i915_disable_vblank; } } + +u32 intel_hotplug_int_status(struct drm_device *dev, enum port port) +{ + /* SDVO is treated separately */ + if (IS_IVYBRIDGE(dev) || + IS_HASWELL(dev) || + (HAS_PCH_SPLIT(dev) && HAS_PCH_CPT(dev))) { + switch (port) { + case PORT_B: + return SDE_PORTB_HOTPLUG_CPT; + case PORT_C: + return SDE_PORTC_HOTPLUG_CPT; + case PORT_D: + return SDE_PORTD_HOTPLUG_CPT; + default: + BUG(); + } + } else if (HAS_PCH_SPLIT(dev)) { /* ! HAS_PCH_CPT(dev) */ + switch (port) { + case PORT_B: + return SDE_PORTB_HOTPLUG; + case PORT_C: + return SDE_PORTC_HOTPLUG; + case PORT_D: + return SDE_PORTD_HOTPLUG; + default: + BUG(); + } + } else { + switch (port) { + case PORT_B: + return HDMIB_HOTPLUG_INT_STATUS; /* same as PDB_HOTPLUG_INT_STATUS */ + case PORT_C: + return HDMIC_HOTPLUG_INT_STATUS; /* same as PDB_HOTPLUG_INT_STATUS */ + case PORT_D: + return HDMID_HOTPLUG_INT_STATUS; /* same as PDB_HOTPLUG_INT_STATUS */ + default: + BUG(); + } + } + return 0; +} + +u32 intel_crt_hotplug_int_status(struct drm_device *dev) +{ + if (IS_IVYBRIDGE(dev) || + IS_HASWELL(dev) || + (HAS_PCH_SPLIT(dev) && HAS_PCH_CPT(dev))) { + return SDE_CRT_HOTPLUG_CPT; + } else if (HAS_PCH_SPLIT(dev)) { /* ! HAS_PCH_CPT(dev) */ + return SDE_CRT_HOTPLUG; + } else { + return CRT_HOTPLUG_INT_STATUS; + } + return 0; +} + +u32 intel_sdvo_hotplug_int_status(struct drm_device *dev, bool is_sdvo_b) +{ + if (IS_G4X(dev)) { + return is_sdvo_b ? + SDVOB_HOTPLUG_INT_STATUS_G4X : SDVOC_HOTPLUG_INT_STATUS_G4X; + } else if (IS_GEN4(dev)) { + return is_sdvo_b ? + SDVOB_HOTPLUG_INT_STATUS_I965 : SDVOC_HOTPLUG_INT_STATUS_I965; + } else { + return is_sdvo_b ? + SDVOB_HOTPLUG_INT_STATUS_I915 : SDVOC_HOTPLUG_INT_STATUS_I915; + } + return 0; +} diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c index fe20bf7..0cd9ff0 100644 --- a/drivers/gpu/drm/i915/intel_crt.c +++ b/drivers/gpu/drm/i915/intel_crt.c @@ -797,7 +797,7 @@ void intel_crt_init(struct drm_device *dev) */ crt->force_hotplug_required = 0; - dev_priv->hotplug_supported_mask |= CRT_HOTPLUG_INT_STATUS; + dev_priv->hotplug_supported_mask |= intel_crt_hotplug_int_status(dev); /* * TODO: find a proper way to discover whether we need to set the diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index d76258d..1946b5b 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c @@ -2754,21 +2754,19 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port, name = "DPDDC-A"; break; case PORT_B: - dev_priv->hotplug_supported_mask |= DPB_HOTPLUG_INT_STATUS; name = "DPDDC-B"; break; case PORT_C: - dev_priv->hotplug_supported_mask |= DPC_HOTPLUG_INT_STATUS; name = "DPDDC-C"; break; case PORT_D: - dev_priv->hotplug_supported_mask |= DPD_HOTPLUG_INT_STATUS; name = "DPDDC-D"; break; default: WARN(1, "Invalid port %c\n", port_name(port)); break; } + dev_priv->hotplug_supported_mask |= intel_hotplug_int_status(dev, port); if (is_edp(intel_dp)) intel_dp_init_panel_power_sequencer(dev, intel_dp); diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c index 2ee9821..d20f9ff 100644 --- a/drivers/gpu/drm/i915/intel_hdmi.c +++ b/drivers/gpu/drm/i915/intel_hdmi.c @@ -980,21 +980,19 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port, switch (port) { case PORT_B: intel_hdmi->ddc_bus = GMBUS_PORT_DPB; - dev_priv->hotplug_supported_mask |= HDMIB_HOTPLUG_INT_STATUS; break; case PORT_C: intel_hdmi->ddc_bus = GMBUS_PORT_DPC; - dev_priv->hotplug_supported_mask |= HDMIC_HOTPLUG_INT_STATUS; break; case PORT_D: intel_hdmi->ddc_bus = GMBUS_PORT_DPD; - dev_priv->hotplug_supported_mask |= HDMID_HOTPLUG_INT_STATUS; break; case PORT_A: /* Internal port only for eDP. */ default: BUG(); } + dev_priv->hotplug_supported_mask |= intel_hotplug_int_status(dev, port); if (!HAS_PCH_SPLIT(dev)) { intel_hdmi->write_infoframe = g4x_write_infoframe; diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c index 0e03985..567846e 100644 --- a/drivers/gpu/drm/i915/intel_sdvo.c +++ b/drivers/gpu/drm/i915/intel_sdvo.c @@ -2727,17 +2727,7 @@ bool intel_sdvo_init(struct drm_device *dev, uint32_t sdvo_reg, bool is_sdvob) } } - hotplug_mask = 0; - if (IS_G4X(dev)) { - hotplug_mask = intel_sdvo->is_sdvob ? - SDVOB_HOTPLUG_INT_STATUS_G4X : SDVOC_HOTPLUG_INT_STATUS_G4X; - } else if (IS_GEN4(dev)) { - hotplug_mask = intel_sdvo->is_sdvob ? - SDVOB_HOTPLUG_INT_STATUS_I965 : SDVOC_HOTPLUG_INT_STATUS_I965; - } else { - hotplug_mask = intel_sdvo->is_sdvob ? - SDVOB_HOTPLUG_INT_STATUS_I915 : SDVOC_HOTPLUG_INT_STATUS_I915; - } + hotplug_mask = intel_sdvo_hotplug_int_status(dev, intel_sdvo->is_sdvob); drm_encoder_helper_add(&intel_encoder->base, &intel_sdvo_helper_funcs);