Received: by 2002:a05:6358:45e:b0:b5:b6eb:e1f9 with SMTP id 30csp4336007rwe; Tue, 30 Aug 2022 08:22:53 -0700 (PDT) X-Google-Smtp-Source: AA6agR6y2GP9oEGImAzFDEMx+QNxK7y7UXnCbnBgOIhREnMFiR65vQqy+1LRA/UKDC04Jv4XW3Jv X-Received: by 2002:a65:5847:0:b0:42a:df5:1035 with SMTP id s7-20020a655847000000b0042a0df51035mr18352022pgr.248.1661872972995; Tue, 30 Aug 2022 08:22:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1661872972; cv=none; d=google.com; s=arc-20160816; b=0LvbZroTfhx/Yqn3jdsKTrJ3xCYyP/9AYAO5VRjfTocpULhDj6TdjADhsMHS2C1cOG 9R8W8/e2P8F12B6afFTCBFGm3I+WY1NXNnGnyXQd8Fz/kpI5ddoEYCXwhb+CJxLjmIPH y/6FuKJzVEySTWtn2f8cBvQU43CQlLjlpcUKXRunYcSz2JhJelHBOOrHj3ORkjW6uIAP 35S+RTr0RqQfMrxtUBrp7jtfsU3mNz6lfCVB55CMWjczXyOy7b99qMPTsH+AFC5qRp8s fRLU22QE9holyFVGNnzssrefD8vvxaqoE6GYtmHHra40nWL4b9TcEcoV7yp/wSCBhYF2 dEsg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=BrJBPAY2KhM6PQbkaPvI9tg6Z8y2QSCev/1xKr7JVA0=; b=ouXfgvpPAW6viTA1yfoKmtXcsvYBHYDvUohj8XqzKt74WEi/uoMeRNisv2n7H+tUNR TXQeECLWf1zHVuL+V+NeRbW71di/W4wum0IRB4R8OchnwdS2Knd5PJmbpnUwicXGRmIK Qy0e2czXG9wOHGI4myQJzR0+QPrtHuupr+Nav8svMYDMWeST+xxNDCBRJSLBt6dz820c lyHPt+n1r7sUb0sBFfb77lVbLxOFQX1ePBPZc6q3w/i29oJQcw73RVhsqsccAe6nqgVA PLSc90CbvN3ZnP7vbAqv5jRlTL6JLS3PDX1ZcH/GnQFjP5+qbZjBdk+JguBqi9nyvTUk NmAg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=wYhWVIWb; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id c15-20020a170902d48f00b00174afafb48dsi1788432plg.418.2022.08.30.08.22.41; Tue, 30 Aug 2022 08:22:52 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=wYhWVIWb; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230122AbiH3PIW (ORCPT + 99 others); Tue, 30 Aug 2022 11:08:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50906 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229476AbiH3PIU (ORCPT ); Tue, 30 Aug 2022 11:08:20 -0400 Received: from mail-qt1-x82b.google.com (mail-qt1-x82b.google.com [IPv6:2607:f8b0:4864:20::82b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7888FFB0E5 for ; Tue, 30 Aug 2022 08:08:18 -0700 (PDT) Received: by mail-qt1-x82b.google.com with SMTP id cr9so8715179qtb.13 for ; Tue, 30 Aug 2022 08:08:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc; bh=BrJBPAY2KhM6PQbkaPvI9tg6Z8y2QSCev/1xKr7JVA0=; b=wYhWVIWb5ahQeWqpOyFcAsuMkQK7K2pGDQyWcsAlVZyn+MI9odapV1etm4FcXQ7vP3 FlVwkDD8cpKUJU6Ga+kilKKFttWNZI6LB4Uq7hLCDM94a499BY9REJWgyXefREp22jTL 1h4/vvcsS/kgK5HLwkyqTXqcCk/F+hAQ845bkF3iZ97RjEhV9AoQR+sCSMq9+h/v7MP5 GuRRi5vxUyZGLSVq+r3ONAzyaLG9w/nN2Leu0NMNXmCZh8Bemcz2VUZnWwU9XkFgD45W E8HgZOHRgxilhwIu4C92wlV4E1y8WRMBwxS0QFLVl5NHwwGnMoGjwYQaxWSywEvC+IBJ g5Hg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc; bh=BrJBPAY2KhM6PQbkaPvI9tg6Z8y2QSCev/1xKr7JVA0=; b=7CpJSaTpumhGQ/mWKi6IoHFyMcdEYl8waOImXufE9vwihYNQolePrOZ+yR5JdHTk7q KaHdty5W4Cap823vM5WgQhMFnvFrMIljWclFGCbyuLdhRbM+74a3nlXTQ4MKw/NNPIWk IQnFp0/MUOggNU1x7G5Bz/boveLG9a2sHawlW3m2iGpIVytEFRgvyPsE5A1TAS6bpHbO R6QUMAx40o8m6hjBPkRuXk5p6dnZt5JXlLt0C0t+nzsE8tlbfhwvSLgXJlVlmUf1dPai RHPUgi75YUL4QXg3OQkl+xeXqFud3rSU2aSw1qqE8I5kcsrOaMOql/K+rRiNg0YUCa2e iZVg== X-Gm-Message-State: ACgBeo3A9OhVuOsiJsF8EV7Ax5VK6Rz1PtHvn+0OWrJo02qGyF+a7Cfe ZtKURP5NW6yNhUXajbvGuNIIuniI0XsNJ7mP3kghsw== X-Received: by 2002:ac8:5812:0:b0:344:97e2:23a9 with SMTP id g18-20020ac85812000000b0034497e223a9mr14582742qtg.505.1661872097412; Tue, 30 Aug 2022 08:08:17 -0700 (PDT) MIME-Version: 1.0 References: <1642587791-13222-1-git-send-email-ivo.g.dimitrov.75@gmail.com> <1642587791-13222-4-git-send-email-ivo.g.dimitrov.75@gmail.com> <5b6d3e7f-c638-fdc7-5080-44d34abed610@ideasonboard.com> <4128aed0-211a-d12a-6a86-deb4457d39f7@gmail.com> <235621d0-2141-5ef9-bcd4-5c48b985b3a0@gmail.com> <5dc2c212-4967-ab2d-c016-f3b3a854fe32@ti.com> In-Reply-To: <5dc2c212-4967-ab2d-c016-f3b3a854fe32@ti.com> From: Yongqin Liu Date: Tue, 30 Aug 2022 23:08:05 +0800 Message-ID: Subject: Re: [PATCH 3/3] drm: omapdrm: Do no allocate non-scanout GEMs through DMM/TILER To: Andrew Davis , Ivaylo Dimitrov Cc: "Bajjuri, Praneeth" , tomba@kernel.org, airlied@linux.ie, Tomi Valkeinen , merlijn@wizzup.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, tony@atomide.com, linux-omap@vger.kernel.org, Sumit Semwal Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org HI, Andrew Thanks a lot for the information! And great to have you here! Hi, Ivaylo With the code provided by Andrew, could you please help give suggestions on how to modify it in the gralloc lib side? to add the OMAP_BO_SCANOUT flag unconditionally as OMAP_BO_MEM_CONTIG? Thanks, Yongqin Liu On Mon, 29 Aug 2022 at 22:36, Andrew Davis wrote: > > On 8/29/22 8:24 AM, Ivaylo Dimitrov wrote: > > Hi, > > > > > > On 29.08.22 =D0=B3. 5:51 =D1=87., Yongqin Liu wrote: > >> Hi, Ivaylo > >> > >> Sorry for the late response, and Thanks very much for the detailed exp= lanations! > >> > >> On Thu, 18 Aug 2022 at 18:23, Ivaylo Dimitrov > >> wrote: > >>> > >>> Hi, > >>> > >>> On 17.08.22 =D0=B3. 7:52 =D1=87., Yongqin Liu wrote: > >>>> Hi, Ivaylo > >>>> > >>>> On Mon, 15 Aug 2022 at 14:23, Ivaylo Dimitrov > >>>> wrote: > >>>>> > >>>>> Hi Liu, > >>>>> > >>>>> On 14.08.22 =D0=B3. 17:27 =D1=87., Yongqin Liu wrote: > >>>>>> Hi, IvayIo > >>>>>> > >>>>>> Thanks very much for the reply! > >>>>>> > >>>>>> On Sat, 13 Aug 2022 at 14:58, Ivaylo Dimitrov > >>>>>> wrote: > >>>>>>> > >>>>>>> Hi Liu, > >>>>>>> > >>>>>>> On 12.08.22 =D0=B3. 7:35 =D1=87., Yongqin Liu wrote: > >>>>>>>> Hi, Ivaylo, Tomi > >>>>>>>> > >>>>>>>> We have one X15 Android AOSP master build, it could not have the= home > >>>>>>>> screen displayed > >>>>>>>> on the hdmi monitor connected with this change, with the followi= ng > >>>>>>>> message printed on the serial console > >>>>>>>> [ 607.404205] omapdrm omapdrm.0: Failed to setup plane = plane-0 > >>>>>>>> [ 607.410522] omapdrm omapdrm.0: Failed to setup plane = plane-1 > >>>>>>>> [ 607.416381] omapdrm omapdrm.0: Failed to setup plane = plane-2 > >>>>>>>> [ 607.422088] omapdrm omapdrm.0: Failed to setup plane = plane-3 > >>>>>>>> > >>>>>>>> # for details, please check the link here: http://ix.io/4= 7m1 > >>>>>>>> > >>>>>>>> It will work with home screen displayed on the hdmi monitor if t= his > >>>>>>>> change is reverted. > >>>>>>>> > >>>>>>>> Is this the broken problem you talked about here? > >>>>>>>> > >>>>>>>> And could you please give some suggestions on how to have the x1= 5 > >>>>>>>> Android build work with this change? > >>>>>>>> > >>>>>>> > >>>>>>> Make sure scanout (i.e. those to be displayed) buffers are actual= ly > >>>>>>> allocated as such - OMAP_BO_SCANOUT flag must be set when calling > >>>>>>> omap_bo_new(). > >>>>>> > >>>>>> I am not familiar with this area, I am sorry if I asked quite sill= y questions:( > >>>>>> I googled omap_bo_new, and found it's a function of libdrm here[1]= , is > >>>>>> it what you meant here? > >>>>>> > >>>>> > >>>>> Yes, calling this function from userspace ends in kernel code the > >>>>> $subject patch is part of. > >>>>> > >>>>>> If it's the omap_bo_new that we should pass OMAP_BO_SCANOUT when i= t is called, > >>>>>> then is it the correct way to update omap_bo_new to add the OMAP_B= O_SCANOUT flag > >>>>>> before it calls omap_bo_new_impl? > >>>>>> > >>>>> > >>>>> omap_bo_new() is fine and does not need any updates/fixes, it is th= e > >>>>> code that uses it (whoever it is, I am not familiar with the usersp= ace > >>>>> you are using) that shall pass correct flags (third parameter) when > >>>>> calling it. > >>>> > >>>> Sorry, I do not get the point here. > >>>> Like you said, the code that calls omap_bo_new needs to pass OMAP_BO= _SCANOUT, > >>>> then IMO omap_bo_new should be the best place to add the OMAP_BO_SCA= NOUT flag, > >>>> (like via flags =3D flags | OMAP_BO_SCANOUT), that could help avoid > >>>> missing the flag by some code, > >>>> and also avoids hacks/changes on the possible blob binaries. > >>>> > >>>> Do I misunderstand somewhere? > >>>> Or is there some case that OMAP_BO_SCANOUT shouldn't be passed when > >>>> omap_bo_new is called? > >>>> > >>> > >>> Exactly. You need to pass OMAP_BO_SCANOUT only when you want your > >>> buffers to be 'scanout' buffers(i.e. buffers that can be displayed on > >>> screen), which is not always the case - there is no need offscreen > >>> buffers or pixmaps to be scanout capable, for example. There are more > >>> cases like that. > >>> > >>> The problem is that scanout buffer on OMAP4 allocate additional > >>> resources in DMM/TILER (a piece of hardware) and those resources are > >>> limited. Not only that, but DMM/TILER memory space eventually gets > >>> fragmented over time (if you have lots of allocataoins/deallocations) > >>> and you will start getting ENOMEM (or similar) errors. > >>> > >>> Ofc, in your particular use case you may never hit such issues. > >> > >> Thanks, I understand the cases now. > >> > >> > >>>>> BTW you shall really find who and how uses OMAP BO API, in theory i= t > >>>>> might use ioctls directly and not call omap_bo_xxx functions. > >>>> > >>>> Do you mean the DRM_OMAP_GEM_NEW ioctl api? > >>>> There is no place in the AOSP tree to call that except the > >>>> omap_bo_new_impl function, > >>>> which is called by the omap_bo_new and omap_bo_new_tiled functions. > >>>> The omap_bo_new should not be called with the OMAP_BO_TILED flag, > >>>> while the omap_bo_new_tiled should be called with the OMAP_BO_TILED = flag > >>>> > >>>> Regarding to the omap_bo_new function, there are 2 places call it in > >>>> the AOSP tree: > >>>> #1 ./external/libkmsxx/kms++/src/omap/omapframebuffer.cpp > >>>> #2 ./device/ti/beagle_x15/gpu/gralloc.am57x.so > >>>> > >>>> #1 seems not used in AOSP yet, and #2 is one blob binary we do not > >>>> have the source for. > >>>> > >>> > >>> I would bet on gralloc.am57x.so. > >> yeah, that's my guess as well. > >> > >>>>> strace > >>>>> would be your friend there. or gdb, or whatever tools are used on > >>>>> android. Or put some printfs() in omap_bo_new() that output the PID= of > >>>>> the calling process, etc. > >>>> > >>>> Thanks a lot for these great suggestions! Will use them when possibl= e. > >>>> > >>>>>> And another question is that, since the userspace(libdrm) will be = used > >>>>>> to work with different kernel versions, > >>>>>> like the old 4.14, 4.19, etc, do you think there will be problem t= o > >>>>>> pass OMAP_BO_SCANOUT > >>>>>> from the userspace side with the old kernels(which does not have t= his change)? > >>>>>> does this change need to be backported to the old kernel versions? > >>>>> > >>>>> There should not be any issue. The changes could be backported if o= ne > >>>>> hits the issues this $series is fixing, but there is no need. > >>>> > >>>> Thanks for the confirmation! > >>>> I just boot-tested with adding OMAP_BO_SCANOUT in the omap_bo_new fu= nction, > >>>> and it worked with the current 4.14, 4.19, and the mainline kernels. > >>>> # via adding line "flags =3D flags | OMAP_BO_SCANOUT" in the omap_bo= _new function. > >>>> > >>> > >>> sure, the point is that with this change *every* BO will be allocated= as > >>> scanout BO, potentially leading to the above explained issues. > >> > >> get it. > >> > >>>>>> > >>>>>> And the last question is that, omap_bo_new might be called by some > >>>>>> property binaries what not everyone > >>>>>> could get the source to update, for such case what's your suggesti= ons? > >>>>>> > >>>>> > >>>>> Hard to say without knowing what that library would be. > >>>>> > >>>>> When I hit issues with closed blobs, sometimes I reverse-engineer t= hem > >>>>> to fix the issue, example: > >>>>> > >>>>> https://github.com/maemo-leste/sgx-ddk-um/tree/master/dbm > >>>>> > >>>>> This is REed libdbm from sgx-ddk-um 1.17.4948957, that is responsib= le > >>>>> for allocating BOs (what omap_bo_new() does) but it uses DUMB buffe= rs > >>>>> API, instead of OMAP BO API. > >>>>> > >>>>> I guess you are using some older version of sgx-ddk-um, so you may = fix > >>>>> in similar way. Or binary patch. > >>>> > >>>> The blob binary that calls omap_bo_new is the gralloc.am57x.so here[= 2]: > >>>> any suggestions with it? > >>>> # sorry, I am not able to find out how you did the reverse-engineer > >>>> work# with the dbm repository shared here, > >>>> # not sure if you could give some tutorial steps for the similar > >>>> reverse-engineer# work with gralloc.am57x.so > >>>> > >>> > >>> Sorry, but it is like if you ask me to provide you with a tutorial on > >>> how to do brain surgery :) > >>> > >>>> [2]: https://android.googlesource.com/device/ti/beagle-x15/+/refs/he= ads/master/gpu/gralloc.am57x.so > >>>> > >>> > >>> I investigated this a bit and it seems it calls omap_bo_new() in a > >>> wrapper function like: > >>> > >>> bo =3D omap_bo_new(dev, -page_size & (size + page_size - 1), ((param5= & > >>> 0x800000) !=3D 0) | OMAP_BO_WC | OMAP_BO_MEM_CONTIG); > >>> > >>> Didn't investigate further what param5 is, but it controls if > >>> OMAP_BO_SCANOUT is passed to omap_bo_new or not. > >>> > >>> However, this library was not made with upstream kernel in mind, as > >>> AFAIK OMAP_BO_MEM_CONTIG never made it upstream: > >>> > >>> https://yhbt.net/lore/all/2580272.MiZDHyRxZo@avalon/T/ > >>> > >>> @Tomi - any comment? > >>> > >>> So, you have couple of options: > >>> > >>> 1. Ask TI for upstream-compatible library. > >> check is in progress, but it would take quite a long time I guess > >>> 2. Try to push OMAP_BO_MEM_CONTIG patch upstream. > >> hmm, sounds like one impossible thing... > >>> 3. Modify omap_bo_new() to something like: > >>> . > >>> #define OMAP_BO_MEM_CONTIG 0x00000008 /* only use contiguou= s dma mem */ > >>> . > >>> if (flags & OMAP_BO_MEM_CONTIG) > >>> flags |=3D OMAP_BO_SCANOUT; > >>> . > >>> This will not achieve exactly what OMAP_BO_MEM_CONTIG is supposed to = do, > >>> but should make it work, at least. > >> > >> This looks like the only doable thing at the moment, maybe one change > >> needs to be submitted to the mesa/drm repository. > >> I can submit a request on your #3 change to the mesa/drm repository > >> for discussion after some check if you do not mind. > >> > > > > I doubt mesa/drm will accept such hack, I think you will need to suppor= t your drm clone (with the above fix) until TI fixes the closed library. > > > > > Hi all, > > Just got around to reading this thread. I work with the TI gralloc lib > and can generate new versions as needed (I was probably the one who compi= led > the version you have now). I've wanted to have our gralloc layer open sou= rce'd > as there is nothing really propriety in it (and I re-wrote a lot of it al= ready) > and to avoid issues like this. But it interacts with the GPU code in some= places, > so it's up to Imagination :(. The actual code in question if it helps is: > > if(ui32Flags & PVRSRV_MEM_CACHED) > flags &=3D ~OMAP_BO_CACHE_MASK; > else > flags |=3D OMAP_BO_WC; > > if (ui32Flags & PVRSRV_HAP_CONTIG) > flags |=3D OMAP_BO_SCANOUT; > > flags &=3D ~OMAP_BO_TILED_MASK; > flags |=3D 0x00000008; > flags |=3D OMAP_BO_WC; > > bo =3D omap_bo_new(dev, size, flags); > > As you can see we use 0x00000008 (OMAP_BO_MEM_CONTIG) unconditionally. > This was a hack added since even non-scanout buffers sometimes need > to be contiguous (video decoder surfaces), but we had no way back > then to communicate this to the gralloc layer. I think your best > bet would be to modify the gralloc lib to not do that, or put it > under the CONTIG check. > > If you tell me what the code should look like, I can rebuild the > lib and post a copy. > > Long term, I'd like to start using DMA-BUF Heaps for CMA memory > allocations in gralloc and elsewhere, then drop out the DMM/TILER > support from OMAPDRM, since it never really belonged there in > the first place (being a IOMMU unrelated to the display/GPU). > > Thanks, > Andrew > > > > Regards, > > Ivo > > > >> Thanks, > >> Yongqin Liu > >> > >>>>>>>> On Thu, 17 Feb 2022 at 23:29, Ivaylo Dimitrov > >>>>>>>> wrote: > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> On 17.02.22 =D0=B3. 14:46 =D1=87., Tomi Valkeinen wrote: > >>>>>>>>>> Hi, > >>>>>>>>>> > >>>>>>>>>> On 19/01/2022 12:23, Ivaylo Dimitrov wrote: > >>>>>>>>>>> On devices with DMM, all allocations are done through either = DMM or > >>>>>>>>>>> TILER. > >>>>>>>>>>> DMM/TILER being a limited resource means that such allocation= s will start > >>>>>>>>>>> to fail before actual free memory is exhausted. What is even = worse is > >>>>>>>>>>> that > >>>>>>>>>>> with time DMM/TILER space gets fragmented to the point that e= ven if we > >>>>>>>>>>> have > >>>>>>>>>>> enough free DMM/TILER space and free memory, allocation fails= because > >>>>>>>>>>> there > >>>>>>>>>>> is no big enough free block in DMM/TILER space. > >>>>>>>>>>> > >>>>>>>>>>> Such failures can be easily observed with OMAP xorg DDX, for = example - > >>>>>>>>>>> starting few GUI applications (so buffers for their windows a= re > >>>>>>>>>>> allocated) > >>>>>>>>>>> and then rotating landscape<->portrait while closing and open= ing new > >>>>>>>>>>> windows soon results in allocation failures. > >>>>>>>>>>> > >>>>>>>>>>> Fix that by mapping buffers through DMM/TILER only when reall= y needed, > >>>>>>>>>>> like, for scanout buffers. > >>>>>>>>>> > >>>>>>>>>> Doesn't this break users that get a buffer from omapdrm and ex= pect it to > >>>>>>>>>> be contiguous? > >>>>>>>>>> > >>>>>>>>> > >>>>>>>>> If you mean dumb buffer, then no, this does not break users as = dumb > >>>>>>>>> buffers are allocated as scanout: > >>>>>>>>> > >>>>>>>>> https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/= omapdrm/omap_gem.c#L603 > >>>>>>>>> > >>>>>>>>> If you mean omap_bo allocated buffers, then if users want > >>>>>>>>> linear(scanout) buffer, then they request it explicitly by pass= ing > >>>>>>>>> OMAP_BO_SCANOUT. > >>>>>>>>> > >>>>>>>>> Ivo > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>> > >>>> > >>>> > >> > >> > >> --=20 Best Regards, Yongqin Liu --------------------------------------------------------------- #mailing list linaro-android@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-android