[PATCH v2 3/3] drm/nouveau: Add drm_panic support for nv50+

Jocelyn Falempe jfalempe at redhat.com
Thu Sep 12 10:58:36 UTC 2024


On 11/09/2024 16:39, Ilia Mirkin wrote:
> On Wed, Sep 11, 2024 at 10:19 AM Jocelyn Falempe <jfalempe at redhat.com 
> <mailto:jfalempe at redhat.com>> wrote:
> 
>     On 06/09/2024 21:36, James Jones wrote:
>      > Right, there are 3 iterations of block linear tiling actually.
>     NV50 does
>      > support scanout of block linear surfaces. All block-linear-
>     capable GPUs
>      > do. The 3 generations are:
>      >
>      > NV5x/G8x/GTXXX line: Original block size.
>      > GFXXX(nvc0 I believe in nouveau terms)-GV100: double the block
>     height I
>      > believe.
>      > GTXXX+: Same block size, but the layout within a block is subtly
>      > different, at least as visible in CPU mappings.
>      >
> 
>     I'm looking at how to check for specific chip in nouveau, and fix the
>     tiling for other cards than Turing.
>     It looks like in most case nouveau uses device->info.chipset, with
>     hardcoded hex value. so for nvc0+ I should check device-
>      >info.chipset >=
>     0xc0 ?
> 
>     chipset < c0 : block_height 4, "old layout"
>     chipset >= c0 : block_height 8, "old layout"
>     chispet >= ?? : block_height 8, "new layout"
> 
>     For testing, I have at hand a GTX1650 (Turing) and an old Geforce
>     8800GTS (Tesla?), so it's a NV92, and still uses this nv50+ code ?
> 
> 
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/ 
> drivers/gpu/drm/nouveau/nvkm/engine/device/base.c#n2399 <https:// 
> git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/ 
> gpu/drm/nouveau/nvkm/engine/device/base.c#n2399>
> 
> So probably >= 0x160
> 
> There should also be a device->card_type which is an enum that you can 
> use too, depending on what you have available? Set here:
> 
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/ 
> drivers/gpu/drm/nouveau/nvkm/engine/device/base.c#n3177 <https:// 
> git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/ 
> gpu/drm/nouveau/nvkm/engine/device/base.c#n3177>
> 
> Once you have a patch tested, ideally someone with the hardware should 
> test on a >= fermi && < turing card.

I'm testing on my 8800 GTS.

The problem I have is that fb->modifier is 0, but the buffer is still 
tiled. I found there is a nouveau_framebuffer_get_layout() which gives 
tile_mode and kind, and works on my Tesla.

So if I understand correctly, if kind != 0, there is tiling, and the 
block size is 8 * (1 << tile_mode). (and half this on Tesla).

At least tiling is much easier on Tesla, there is no tiling inside the 
block. In my test, block size is 4K, 16x64 pixels, tile_mode is 4, and 
kind is 122.

I will send a v3 which works on Tesla and Turing soon.

Thanks for your help.

-- 

Jocelyn

> 
> Hope this helps,
> 
>    -ilia



More information about the dri-devel mailing list