Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp3934502imu; Fri, 30 Nov 2018 08:15:01 -0800 (PST) X-Google-Smtp-Source: AFSGD/W4eTRW3EljbIZGFOp4N4PevUBj9B8xue6oR3VWlPa59fj95dmE7TPFETPNpLO5OFpvWw6G X-Received: by 2002:aa7:83c6:: with SMTP id j6mr6170277pfn.91.1543594501248; Fri, 30 Nov 2018 08:15:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543594501; cv=none; d=google.com; s=arc-20160816; b=u8/y1KBVfO+aItDApwFkTYZ0pO/mzMMd8nax4o4ucvQ/Z6lpShwqbEYMdXXQROcEUq bZfHOSClZ1YcCjz+OK8q7aHuHLtza6cSOyivjRbiO0+x4CsQ215iY0HrtOY2keTufJBz tI43s0DiMHUNRjkFfM9Wqj4bH58qdZMBDyrD9w0M+Ec8HiZhO2qce97mz6lriiSiT9Aa SEF4dN51zsYoY7eXJnMif7C6qavN5oAPrFjNcXg3EzWd3FH7wkmMPFPIjrHC0+CN8tcC pfnS3JLSxJM4BZvfthr4exSvRk9Rvz0qn9ojQunfEs6UONB0RN8QggLokG0BhAsMYzp1 BzWQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=w0W+G6qx9UJEj7eSDvSwvpx3s8dBZa5EAKiktcMPU4o=; b=ss9J/4FUeXZkEUSFt3/sXNmx4xhrb2iQKZNwHhLuXyYpQY1YnCG3QCdSh/1WbzazL2 SEpqYx1gAXvTXthVHLut3wcj65pGYPEwK8cwaEqFo9NSuNI3M1oeU/6+yospNJ65y7RX B6TRs3kopXDC83zyztUGIIvuqtZAJGheFlIX/MOPxpwKrlUVN82WeZE496lwdcqHrW6E b/am/RHBLK3qAHRA+kIbyicMyrAGjOX6aovAx18FWhdnH0YXY74S0CP84PVVwiX6ugS2 n3DhMhZlwcRCLuQDfs4/hZcqxGcsFwnXPvrYkSLk2uuhPM/keiThBAQt/SV/PpGd8qeB gjkA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l3si5768039pld.155.2018.11.30.08.14.25; Fri, 30 Nov 2018 08:15:01 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727479AbeLADVR (ORCPT + 99 others); Fri, 30 Nov 2018 22:21:17 -0500 Received: from mail.bootlin.com ([62.4.15.54]:59512 "EHLO mail.bootlin.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726659AbeLADVR (ORCPT ); Fri, 30 Nov 2018 22:21:17 -0500 Received: by mail.bootlin.com (Postfix, from userid 110) id 4BEEC20701; Fri, 30 Nov 2018 17:11:27 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mail.bootlin.com X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,SHORTCIRCUIT shortcircuit=ham autolearn=disabled version=3.4.2 Received: from localhost.localdomain (aaubervilliers-681-1-63-158.w90-88.abo.wanadoo.fr [90.88.18.158]) by mail.bootlin.com (Postfix) with ESMTPSA id E1E1D206D8; Fri, 30 Nov 2018 17:11:26 +0100 (CET) From: Paul Kocialkowski To: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Cc: Eric Anholt , David Airlie , Maxime Ripard , Thomas Petazzoni , Boris Brezillon , Paul Kocialkowski Subject: [PATCH v2] drm/vc4: Add a debugfs entry to disable/enable the load tracker Date: Fri, 30 Nov 2018 17:11:04 +0100 Message-Id: <20181130161104.16352-1-paul.kocialkowski@bootlin.com> X-Mailer: git-send-email 2.19.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In order to test whether the load tracker is working as expected, we need the ability to compare the commit result with the underrun indication. With the load tracker always enabled, commits that are expected to trigger an underrun are always rejected, so userspace cannot get the actual underrun indication from the hardware. Add a debugfs entry to disable/enable the load tracker, so that a DRM commit expected to trigger an underrun can go through with the load tracker disabled. The underrun indication is then available to userspace and can be checked against the commit result with the load tracker enabled. Signed-off-by: Paul Kocialkowski --- Changes since v1: * Moved all the debugfs-related functions and structure to vc4_debugfs.c. drivers/gpu/drm/vc4/vc4_debugfs.c | 58 +++++++++++++++++++++++++++++++ drivers/gpu/drm/vc4/vc4_drv.c | 2 ++ drivers/gpu/drm/vc4/vc4_drv.h | 2 ++ drivers/gpu/drm/vc4/vc4_kms.c | 6 +++- 4 files changed, 67 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/vc4/vc4_debugfs.c b/drivers/gpu/drm/vc4/vc4_debugfs.c index 7a0003de71ab..8f4d7fadb226 100644 --- a/drivers/gpu/drm/vc4/vc4_debugfs.c +++ b/drivers/gpu/drm/vc4/vc4_debugfs.c @@ -32,9 +32,67 @@ static const struct drm_info_list vc4_debugfs_list[] = { #define VC4_DEBUGFS_ENTRIES ARRAY_SIZE(vc4_debugfs_list) +static int vc4_debugfs_load_tracker_get(struct seq_file *m, void *data) +{ + struct drm_device *dev = m->private; + struct vc4_dev *vc4 = to_vc4_dev(dev); + + if (vc4->load_tracker_enabled) + seq_printf(m, "enabled\n"); + else + seq_printf(m, "disabled\n"); + + return 0; +} + +static ssize_t vc4_debugfs_load_tracker_set(struct file *file, + const char __user *ubuf, + size_t len, loff_t *offp) +{ + struct seq_file *m = file->private_data; + struct drm_device *dev = m->private; + struct vc4_dev *vc4 = to_vc4_dev(dev); + char buf[32] = {}; + + if (len >= sizeof(buf)) + return -EINVAL; + + if (copy_from_user(buf, ubuf, len)) + return -EFAULT; + + if (!strncasecmp(buf, "enable", 6)) + vc4->load_tracker_enabled = true; + else if (!strncasecmp(buf, "disable", 7)) + vc4->load_tracker_enabled = false; + else + return -EINVAL; + + return len; +} + +static int vc4_debugfs_load_tracker_open(struct inode *inode, struct file *file) +{ + return single_open(file, vc4_debugfs_load_tracker_get, inode->i_private); +} + +static const struct file_operations vc4_debugfs_load_tracker_fops = { + .owner = THIS_MODULE, + .open = vc4_debugfs_load_tracker_open, + .read = seq_read, + .write = vc4_debugfs_load_tracker_set, +}; + int vc4_debugfs_init(struct drm_minor *minor) { + struct dentry *dentry; + + dentry = debugfs_create_file("load_tracker", S_IRUGO | S_IWUSR, + minor->debugfs_root, minor->dev, + &vc4_debugfs_load_tracker_fops); + if (!dentry) + return -ENOMEM; + return drm_debugfs_create_files(vc4_debugfs_list, VC4_DEBUGFS_ENTRIES, minor->debugfs_root, minor); } diff --git a/drivers/gpu/drm/vc4/vc4_drv.c b/drivers/gpu/drm/vc4/vc4_drv.c index 7195a0bcceb3..12ac971d24d6 100644 --- a/drivers/gpu/drm/vc4/vc4_drv.c +++ b/drivers/gpu/drm/vc4/vc4_drv.c @@ -290,6 +290,8 @@ static int vc4_drm_bind(struct device *dev) drm_fbdev_generic_setup(drm, 32); + vc4->load_tracker_enabled = true; + return 0; unbind_all: diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h index 11369da944b6..8d0f2f16a9e8 100644 --- a/drivers/gpu/drm/vc4/vc4_drv.h +++ b/drivers/gpu/drm/vc4/vc4_drv.h @@ -188,6 +188,8 @@ struct vc4_dev { int power_refcount; + bool load_tracker_enabled; + /* Mutex controlling the power refcount. */ struct mutex power_lock; diff --git a/drivers/gpu/drm/vc4/vc4_kms.c b/drivers/gpu/drm/vc4/vc4_kms.c index b905a19c1470..4b2509b1b8ed 100644 --- a/drivers/gpu/drm/vc4/vc4_kms.c +++ b/drivers/gpu/drm/vc4/vc4_kms.c @@ -473,6 +473,7 @@ static const struct drm_private_state_funcs vc4_load_tracker_state_funcs = { static int vc4_atomic_check(struct drm_device *dev, struct drm_atomic_state *state) { + struct vc4_dev *vc4 = to_vc4_dev(dev); int ret; ret = vc4_ctm_atomic_check(dev, state); @@ -483,7 +484,10 @@ vc4_atomic_check(struct drm_device *dev, struct drm_atomic_state *state) if (ret) return ret; - return vc4_load_tracker_atomic_check(state); + if (vc4->load_tracker_enabled) + return vc4_load_tracker_atomic_check(state); + + return 0; } static const struct drm_mode_config_funcs vc4_mode_funcs = { -- 2.19.1