From patchwork Wed Jun 12 20:55:44 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rodrigo Vivi X-Patchwork-Id: 2712291 Return-Path: X-Original-To: patchwork-intel-gfx@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 6B98FC1459 for ; Wed, 12 Jun 2013 20:58:42 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 4A41D20261 for ; Wed, 12 Jun 2013 20:58:41 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 7B04C2025F for ; Wed, 12 Jun 2013 20:58:40 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 977CBE647A for ; Wed, 12 Jun 2013 13:58:40 -0700 (PDT) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-pd0-f182.google.com (mail-pd0-f182.google.com [209.85.192.182]) by gabe.freedesktop.org (Postfix) with ESMTP id 621C5E5C0C for ; Wed, 12 Jun 2013 13:56:16 -0700 (PDT) Received: by mail-pd0-f182.google.com with SMTP id r10so4393721pdi.13 for ; Wed, 12 Jun 2013 13:56:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references; bh=O1dGNBN/bKRfKQOaXq8L2dSCJ2sgWNrm50rLEbAz8rQ=; b=FDUnmJOYcHX5uxLmwIKWy47xiXkvmxm06J5O+KezlLd9OhwxQQRSlPK1KCAlRvWMUn TkCZRv2ioPXPfxcvpDbDbmITXqlYy96uUqUdjKfG0HWAi6i/NpT4ZUqZ0Bp7xCXpkXfx vhaCC8JM4H32rLEFGRSO42i+1rxcpLRdNq6EjFjg0gsryCv27YaSMiBkw0/xT9Z1m74E c/zeEHHyEsfj7LBc5bmvTj580XvdZ5RhF93SVHL1nrciAYz5gDPNe6PzqvHS3/J8rg5d i5zJKlWsrkH3KbIoqj76ey1vLVG1ikBLdXAee5I5r1GjDup71pI80l9+XWa2TxBSVZ8C evXg== X-Received: by 10.68.170.68 with SMTP id ak4mr21367858pbc.211.1371070576091; Wed, 12 Jun 2013 13:56:16 -0700 (PDT) Received: from localhost (jfdmzpr05-ext.jf.intel.com. [134.134.139.74]) by mx.google.com with ESMTPSA id qp4sm20367101pbc.41.2013.06.12.13.56.13 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Wed, 12 Jun 2013 13:56:15 -0700 (PDT) From: Rodrigo Vivi To: intel-gfx@lists.freedesktop.org Date: Wed, 12 Jun 2013 17:55:44 -0300 Message-Id: <1371070554-1947-3-git-send-email-rodrigo.vivi@gmail.com> X-Mailer: git-send-email 1.7.11.7 In-Reply-To: <1371070554-1947-1-git-send-email-rodrigo.vivi@gmail.com> References: <1371070554-1947-1-git-send-email-rodrigo.vivi@gmail.com> Subject: [Intel-gfx] [PATCH 03/13] drm/i915: VBT Parsing for the PSR Feature Block for HSW 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 X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Shobhit Kumar Parse and store useful information in i915_dev_private v2: Add to new vbt struct and call them psr_* v3: Fix comment and variable name Signed-off-by: Shobhit Kumar Signed-off-by: Rodrigo Vivi --- drivers/gpu/drm/i915/i915_drv.h | 7 +++++++ drivers/gpu/drm/i915/intel_bios.c | 30 ++++++++++++++++++++++++++++++ drivers/gpu/drm/i915/intel_bios.h | 20 +++++++++++++++++++- 3 files changed, 56 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 87f7f88..dd459a5 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -951,6 +951,13 @@ struct intel_vbt_data { int edp_bpp; struct edp_power_seq edp_pps; + /* eDP PSR*/ + u8 psr_full_link_state; + u8 psr_wait_lines; + u8 psr_idle_frames; + u16 psr_wakeup_tp1; + u16 psr_wakeup_tp2_tp3; + int crt_ddc_pin; int child_dev_num; diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c index 53f2bed..99c6788 100644 --- a/drivers/gpu/drm/i915/intel_bios.c +++ b/drivers/gpu/drm/i915/intel_bios.c @@ -383,6 +383,35 @@ parse_general_definitions(struct drm_i915_private *dev_priv, } } + +static void +parse_edp_psr(struct drm_i915_private *dev_priv, struct bdb_header *bdb) +{ + struct bdb_psr_features *psr; + struct bdb_lvds_options *lvds_opts; + int index = 0; + lvds_opts = find_section(bdb, BDB_LVDS_OPTIONS); + if (!lvds_opts) { + DRM_DEBUG_KMS("No LVDS Options block found.\n"); + return; + } + + index = lvds_opts->panel_type; + + psr = find_section(bdb, BDB_PSR_FEATURES); + if (!psr) { + DRM_DEBUG_KMS("No PSR feature block found.\n"); + return; + } + + dev_priv->vbt.psr_full_link_state = psr[index].link_disable; + dev_priv->vbt.psr_wait_lines = psr[index].wait_lines; + dev_priv->vbt.psr_idle_frames = psr[index].idle_frames; + dev_priv->vbt.psr_wakeup_tp1 = psr[index].wakeup_tp1; + dev_priv->vbt.psr_wakeup_tp2_tp3 = psr[index].wakeup_tp2_tp3; +} + + static void parse_sdvo_device_mapping(struct drm_i915_private *dev_priv, struct bdb_header *bdb) @@ -745,6 +774,7 @@ intel_parse_bios(struct drm_device *dev) parse_device_mapping(dev_priv, bdb); parse_driver_features(dev_priv, bdb); parse_edp(dev_priv, bdb); + parse_edp_psr(dev_priv, bdb); if (bios) pci_unmap_rom(pdev, bios); diff --git a/drivers/gpu/drm/i915/intel_bios.h b/drivers/gpu/drm/i915/intel_bios.h index e088d6f..c883b87 100644 --- a/drivers/gpu/drm/i915/intel_bios.h +++ b/drivers/gpu/drm/i915/intel_bios.h @@ -80,7 +80,7 @@ struct vbios_data { #define BDB_EXT_MMIO_REGS 6 #define BDB_SWF_IO 7 #define BDB_SWF_MMIO 8 -#define BDB_DOT_CLOCK_TABLE 9 +#define BDB_PSR_FEATURES 9 #define BDB_MODE_REMOVAL_TABLE 10 #define BDB_CHILD_DEVICE_TABLE 11 #define BDB_DRIVER_FEATURES 12 @@ -265,6 +265,24 @@ struct bdb_lvds_options { u8 rsvd4; } __attribute__((packed)); +struct bdb_psr_features { + /* Feature bits */ + u8 link_disable:1; + u8 require_aux:1; + u8 rsvd1:6; + + /* Wait times */ + u8 idle_frames:4; + u8 wait_lines:3; + u8 rsvd2:1; + + /* TP1 wakeup time */ + u16 wakeup_tp1; + + /* TP2 TP3 wakeup time */ + u16 wakeup_tp2_tp3; +} __attribute__((packed)); + /* LFP pointer table contains entries to the struct below */ struct bdb_lvds_lfp_data_ptr { u16 fp_timing_offset; /* offsets are from start of bdb */