Received: by 10.213.65.68 with SMTP id h4csp467680imn; Wed, 4 Apr 2018 01:29:22 -0700 (PDT) X-Google-Smtp-Source: AIpwx4+q1zGis9xqDSNGIcTeWMdrWb9KWsmFUdqsH/nxM9UBAv4lA0ee8zkexaJiWotHsnx7h9Ix X-Received: by 2002:a17:902:7688:: with SMTP id m8-v6mr6996406pll.340.1522830562615; Wed, 04 Apr 2018 01:29:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522830562; cv=none; d=google.com; s=arc-20160816; b=adJ1U6AUqJMfrzd2Q58J/F5EygVohACCQUyUVnUJSUWcb+iBNDsHqYzUQCJyNV1KXh xSBnQrM4zwLamXt4i37hSpn24Qo5u4bkIqru7WbJwvHR0VvrAeBmhARsb7DENEUNtz0L zh+9FKnP243xlQI3m2TfsLlNS8TLWQUbXg9vLAE2ClNNSxccVesjAQAk7B5+r2ZHe54i BlSPyHWeZLfVDdEUKLe/77s6ZEZU4qYupGmy7bOIUbv6pMn6tOrr29NF7XAUUIlZwyn7 T47V5jx3P/LFIFqbvuhiNIRFfcrKNAAiABrPuB20JA8XzpNA6SG78qQ2jcqMXI6q9teG xKCA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-language :content-transfer-encoding:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:arc-authentication-results; bh=q+aXmuuBx5BWlETY7xZQu9jz/R0kZr8TbOT7Oz1UIEU=; b=czn6d2VywcetlbgT3rVZh5TNbX7HGn2TDZZjR58s87mkHlVznhsPFp0aY5ztBBg3rE S94SIiIc1dT5Gv2IfqHE56R9jcxluOyXfW6i1P892DXcJD+VkVQUGkLNLm4PbG4fVr8A pnK23Y8Vbhs9yDVTubGdk2fVlL8koBOaa1cm0EBb8X620rRyZYqlhr14XrC2++1c5Ko8 S4tFEH2weB5QFOIDUM10W47layzaSe/ropLlQDudZ6WLErpUg9sHmvE+25eriEqoA6HA Qjrtv92SYBHvXP3aBVXERdA1gEmRf/7UdeFrcOkfo4XpxMVzbOfsrp/SnEX/PB8tXnvZ kr1A== 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 a32-v6si2602538pla.313.2018.04.04.01.29.08; Wed, 04 Apr 2018 01:29:22 -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; 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 S1751295AbeDDI2B (ORCPT + 99 others); Wed, 4 Apr 2018 04:28:01 -0400 Received: from pio-pvt-msa3.bahnhof.se ([79.136.2.42]:43323 "EHLO pio-pvt-msa3.bahnhof.se" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751163AbeDDI16 (ORCPT ); Wed, 4 Apr 2018 04:27:58 -0400 X-Greylist: delayed 327 seconds by postgrey-1.27 at vger.kernel.org; Wed, 04 Apr 2018 04:27:58 EDT Received: from localhost (localhost [127.0.0.1]) by pio-pvt-msa3.bahnhof.se (Postfix) with ESMTP id A6A1D3F74F; Wed, 4 Apr 2018 10:22:24 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at bahnhof.se Received: from pio-pvt-msa3.bahnhof.se ([127.0.0.1]) by localhost (pio-pvt-msa3.bahnhof.se [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id CmMwjUaEf-Q4; Wed, 4 Apr 2018 10:22:24 +0200 (CEST) Received: from mail1.shipmail.org (h-205-56.A357.priv.bahnhof.se [155.4.205.56]) (Authenticated sender: mb878879) by pio-pvt-msa3.bahnhof.se (Postfix) with ESMTPA id DFAEB3F735; Wed, 4 Apr 2018 10:22:22 +0200 (CEST) Received: from linlap1.host.shipmail.org (unknown [185.29.113.161]) by mail1.shipmail.org (Postfix) with ESMTPSA id F0F373601D1; Wed, 4 Apr 2018 10:22:21 +0200 (CEST) Subject: Re: [RFC] drm/atomic+msm: add helper to implement legacy dirtyfb To: Daniel Vetter , Rob Clark , =?UTF-8?Q?Noralf_Tr=c3=b8nnes?= Cc: dri-devel , freedreno , linux-arm-msm , =?UTF-8?B?VmlsbGUgU3lyasOkbMOk?= , Lukasz Spintzyk , Deepak Singh Rawat , Gustavo Padovan , Maarten Lankhorst , Sean Paul , David Airlie , Linux Kernel Mailing List References: <20180403224225.26776-1-robdclark@gmail.com> From: Thomas Hellstrom Message-ID: <307adb15-412a-1fe2-f116-27fe5b4a657d@shipmail.org> Date: Wed, 4 Apr 2018 10:22:21 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.2 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, On 04/04/2018 08:58 AM, Daniel Vetter wrote: > On Wed, Apr 4, 2018 at 12:42 AM, Rob Clark wrote: >> Add an atomic helper to implement dirtyfb support. This is needed to >> support DSI command-mode panels with x11 userspace (ie. when we can't >> rely on pageflips to trigger a flush to the panel). >> >> To signal to the driver that the async atomic update needs to >> synchronize with fences, even though the fb didn't change, the >> drm_atomic_state::dirty flag is added. >> >> Signed-off-by: Rob Clark >> --- >> Background: there are a number of different folks working on getting >> upstream kernel working on various different phones/tablets with qcom >> SoC's.. many of them have command mode panels, so we kind of need a >> way to support the legacy dirtyfb ioctl for x11 support. >> >> I know there is work on a proprer non-legacy atomic property for >> userspace to communicate dirty-rect(s) to the kernel, so this can >> be improved from triggering a full-frame flush once that is in >> place. But we kinda needa a stop-gap solution. >> >> I had considered an in-driver solution for this, but things get a >> bit tricky if userspace ands up combining dirtyfb ioctls with page- >> flips, because we need to synchronize setting various CTL.FLUSH bits >> with setting the CTL.START bit. (ie. really all we need to do for >> cmd mode panels is bang CTL.START, but is this ends up racing with >> pageflips setting FLUSH bits, then bad things.) The easiest soln >> is to wrap this up as an atomic commit and rely on the worker to >> serialize things. Hence adding an atomic dirtyfb helper. >> >> I guess at least the helper, with some small addition to translate >> and pass-thru the dirty rect(s) is useful to the final atomic dirty- >> rect property solution. Depending on how far off that is, a stop- >> gap solution could be useful. > Adding Noralf, who iirc already posted the full dirty helpers already somewhere. > -Daniel I've asked Deepak to RFC the core changes suggested for the full dirty blob on dri-devel. It builds on DisplayLink's suggestion, with a simple helper to get to the desired coordinates. One thing to perhaps discuss is how we would like to fit this with front-buffer rendering and the dirty ioctl. In the page-flip context, the dirty rects, like egl's swapbuffer_with_damage is a hint to restrict the damage region that can be fully ignored by the driver, new content is indicated by a new framebuffer. We could do the same for frontbuffer rendering: Either set a dirty flag like you do here, or provide a content_age state member. Since we clear the dirty flag on state copies, I guess that would be sufficient. The blob rectangles would then become a hint to restrict the damage region. Another approach would be to have the presence of dirty rects without framebuffer change to indicate frontbuffer rendering. I think I like the first approach best, although it may be tempting for user-space apps to just set the dirty bit instead of providing the full damage region. /Thomas