Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp9432508ybi; Wed, 10 Jul 2019 10:09:10 -0700 (PDT) X-Google-Smtp-Source: APXvYqyDqDyoJUEkg8C8vSXebHcKC/FoVW/QB+xLq0+Y9BayX6YUuFO3FhyMUnU9SEysSWbr1fiK X-Received: by 2002:a63:fc52:: with SMTP id r18mr38005393pgk.378.1562778550515; Wed, 10 Jul 2019 10:09:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1562778550; cv=none; d=google.com; s=arc-20160816; b=s98ockWmLyQqQpjn6I18y/2uu4xlyQtjrNvO33N0zYcFWOHFTsZszZoccR4EFHedPw v/l/+gfU9kfDU8gYueYT5psflXPTSB+WaoolE1T13WuvONJ5psia7m/ftnfq/dRZ2ti7 l2JrdQ6OK6dQqyVFD3RZOg7ZiZZSLyesJVuz60AAfLHgQnv0F9MKlonuRfBRsV493OZx yjNlCH9hdEMOWDKZ91s63naeN6at3GvAgEAo7teId3xnw5ZbF9i05VAZua+EfV/XP+EQ oC5fxA1ptON64MWj6nJUl0chI1N9BxEs3dif2KHYWte75OjSqHZXhZOPD5eqOdl4Z9r9 xuUw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:mail-followup-to :message-id:subject:cc:to:from:date:dkim-signature; bh=dfuwXMh/PFSs/hNZrr4/4G7Y//4Qrkq5C3uMpNwhxbA=; b=rfdjoje7lWG+bsAPOaIPgmZikY2VvcuRad4kMo9oIpEuw4G8rIIghG6zhqklNVJFng wv1yawDeXO6jS56L81UhpH4OuRhHtIaROyAO8gXEDEsaF7cQs2Aq4rtBbw7yoVnHYJod Tgovr2fwRBUV0roWGOa2+M5TavwCI6+izKtGrp+ff9xo9UN0l96ozZo6NePMtzMPpVZh ORxB/CjVN75YCHQhmOdCgHHrTCVT2t30UdS2aNHjPAhWTEHh/95RKV/9pNOytV6sw5GQ 9Efi1tVKFGPatkSs8kS6lAi9uVVLOZs6DAEOmJ08eQosoAkgSHVyiJ50DDA7mHAhqO7V nM8g== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@ffwll.ch header.s=google header.b=QB9XtGbw; 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 c7si2728459pfi.253.2019.07.10.10.08.37; Wed, 10 Jul 2019 10:09:10 -0700 (PDT) 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; dkim=fail header.i=@ffwll.ch header.s=google header.b=QB9XtGbw; 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 S1727899AbfGJQkl (ORCPT + 99 others); Wed, 10 Jul 2019 12:40:41 -0400 Received: from mail-ed1-f67.google.com ([209.85.208.67]:41853 "EHLO mail-ed1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726957AbfGJQkl (ORCPT ); Wed, 10 Jul 2019 12:40:41 -0400 Received: by mail-ed1-f67.google.com with SMTP id p15so2800855eds.8 for ; Wed, 10 Jul 2019 09:40:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=sender:date:from:to:cc:subject:message-id:mail-followup-to :references:mime-version:content-disposition:in-reply-to:user-agent; bh=dfuwXMh/PFSs/hNZrr4/4G7Y//4Qrkq5C3uMpNwhxbA=; b=QB9XtGbwlJ0dk+sdfcqtd+yhmZhSROLxmsepY6HorySiOWPEIyM9XwVmu5qtWE7dfm 1RlLNpqPlmRxBfmeASPIzX/yL4xsMab7IBT5N5IqwU6jYb7+BaQhj9apEElx6Heb6oze P682jiJU2EuEAH4a1qhV08wm1emG/EFRuFK6w= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:from:to:cc:subject:message-id :mail-followup-to:references:mime-version:content-disposition :in-reply-to:user-agent; bh=dfuwXMh/PFSs/hNZrr4/4G7Y//4Qrkq5C3uMpNwhxbA=; b=n+H0DOvVL32pOBsVgnQt9lT6iRS6LOm4jjTx6APYK/JmqvXnUL0B0C9Fy8596M971s H4RkbKtOD62/VAGq9q3mksIIuBy7ejk1vSquWmiUQ1sCosNtUeTvGF6kjuZK82RBMM/a zWTIWjFQgWsn2tTOr/f0KQaliP5U9aRADrpz5G+Hcckam+WmjDIbG87Gkp9WMUPmwOT+ 8ict7MNteSMyWrlmrUOLzovQ8TfpIVXyde6lF+UUaboqdP+lBo1uC/WjKgmh+gLMtlA/ DJLL7ffuCTRgLpFavK33VqO3KqNJdvPs+4OvzfNFhcxoWNskWtLrjJp7SQyRGimIpgjT o7bw== X-Gm-Message-State: APjAAAVNcEy/c2sS0v+QY7ehtoRmWZp0T6DcYTRAHh4ZLBJdJt/WLECA 4onQ6loExrFH3X8qBmaIrH8r2g== X-Received: by 2002:a50:a4ef:: with SMTP id x44mr33058891edb.304.1562776838911; Wed, 10 Jul 2019 09:40:38 -0700 (PDT) Received: from phenom.ffwll.local ([2a02:168:569e:0:3106:d637:d723:e855]) by smtp.gmail.com with ESMTPSA id e43sm875876ede.62.2019.07.10.09.40.37 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Wed, 10 Jul 2019 09:40:38 -0700 (PDT) Date: Wed, 10 Jul 2019 18:40:36 +0200 From: Daniel Vetter To: Rodrigo Siqueira Cc: Daniel Vetter , Haneen Mohammed , David Airlie , Simon Ser , Oleg Vasilev , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH V3] drm/vkms: Add support for vkms work without vblank Message-ID: <20190710164036.GZ15868@phenom.ffwll.local> Mail-Followup-To: Rodrigo Siqueira , Haneen Mohammed , David Airlie , Simon Ser , Oleg Vasilev , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org References: <20190710015514.42anrmx3r2ijaomz@smtp.gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20190710015514.42anrmx3r2ijaomz@smtp.gmail.com> X-Operating-System: Linux phenom 4.19.0-5-amd64 User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Jul 09, 2019 at 10:55:14PM -0300, Rodrigo Siqueira wrote: > Currently, vkms only work with enabled VBlank. This patch adds another > operation model that allows vkms to work without VBlank support. In this > scenario, vblank signaling is faked by calling drm_send_vblank_event() > in vkms_crtc_atomic_flush(); this approach works due to the > drm_vblank_get() == 0 checking. > > Changes since V2: > - Rebase > > Changes since V1: > Daniel Vetter: > - Change module parameter name from disablevblank to virtual_hw > - Improve parameter description > - Improve commit message > > Signed-off-by: Rodrigo Siqueira > --- > drivers/gpu/drm/vkms/vkms_crtc.c | 10 ++++++++++ > drivers/gpu/drm/vkms/vkms_drv.c | 13 +++++++++++-- > drivers/gpu/drm/vkms/vkms_drv.h | 2 ++ > 3 files changed, 23 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/vkms/vkms_crtc.c b/drivers/gpu/drm/vkms/vkms_crtc.c > index 49a8ec2cb1c1..a0c75b8c4335 100644 > --- a/drivers/gpu/drm/vkms/vkms_crtc.c > +++ b/drivers/gpu/drm/vkms/vkms_crtc.c > @@ -207,12 +207,22 @@ static int vkms_crtc_atomic_check(struct drm_crtc *crtc, > static void vkms_crtc_atomic_enable(struct drm_crtc *crtc, > struct drm_crtc_state *old_state) > { > + struct vkms_output *vkms_out = drm_crtc_to_vkms_output(crtc); > + > + if (vkms_out->disable_vblank) > + return; > + > drm_crtc_vblank_on(crtc); > } > > static void vkms_crtc_atomic_disable(struct drm_crtc *crtc, > struct drm_crtc_state *old_state) > { > + struct vkms_output *vkms_out = drm_crtc_to_vkms_output(crtc); > + > + if (vkms_out->disable_vblank) > + return; > + > drm_crtc_vblank_off(crtc); > } > > diff --git a/drivers/gpu/drm/vkms/vkms_drv.c b/drivers/gpu/drm/vkms/vkms_drv.c > index 152d7de24a76..542a002ef9d5 100644 > --- a/drivers/gpu/drm/vkms/vkms_drv.c > +++ b/drivers/gpu/drm/vkms/vkms_drv.c > @@ -34,6 +34,11 @@ bool enable_writeback; > module_param_named(enable_writeback, enable_writeback, bool, 0444); > MODULE_PARM_DESC(enable_writeback, "Enable/Disable writeback connector"); > > +bool virtual_hw; Can be static, you only use this in vkms_drv.c. > +module_param_named(virtual_hw, virtual_hw, bool, 0444); > +MODULE_PARM_DESC(virtual_hw, > + "Enable virtual hardware mode (disables vblanks and immediately completes flips)"); > + > static const struct file_operations vkms_driver_fops = { > .owner = THIS_MODULE, > .open = drm_open, > @@ -154,9 +159,13 @@ static int __init vkms_init(void) > if (ret) > goto out_unregister; > > - vkms_device->drm.irq_enabled = true; > + vkms_device->output.disable_vblank = virtual_hw; > + vkms_device->drm.irq_enabled = !virtual_hw; > + > + if (virtual_hw) > + DRM_INFO("Virtual hardware mode enabled"); > > - ret = drm_vblank_init(&vkms_device->drm, 1); > + ret = (virtual_hw) ? 0 : drm_vblank_init(&vkms_device->drm, 1); > if (ret) { > DRM_ERROR("Failed to vblank\n"); > goto out_fini; > diff --git a/drivers/gpu/drm/vkms/vkms_drv.h b/drivers/gpu/drm/vkms/vkms_drv.h > index 9ff2cd4ebf81..256e5e65c947 100644 > --- a/drivers/gpu/drm/vkms/vkms_drv.h > +++ b/drivers/gpu/drm/vkms/vkms_drv.h > @@ -21,6 +21,7 @@ > > extern bool enable_cursor; > extern bool enable_writeback; > +extern bool virtual_hw; > > struct vkms_composer { > struct drm_framebuffer fb; > @@ -69,6 +70,7 @@ struct vkms_output { > struct drm_connector connector; > struct drm_writeback_connector wb_connector; > struct hrtimer vblank_hrtimer; > + bool disable_vblank; > ktime_t period_ns; > struct drm_pending_vblank_event *event; > /* ordered wq for composer_work */ I'm kinda wondering how this works at all ... does writeback/crc still work if you set virtual mode? Writeback since this seems based on the writeback series ... btw if you send out patches that need other patches, point at that other series in the cover letter or patch. Gets confusing fast otherwise. -Daniel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch