loongson-community / linux-stable

Linux kernel source tree for Loongson
Other
67 stars 21 forks source link

Graphic related discussions (etnaviv/loongson-drm) #21

Closed suijingfeng closed 4 years ago

suijingfeng commented 4 years ago
[    7.902343] loongson-drm 0000:00:06.1: fb0: loongson-drmdrm frame buffer device
[    7.906250] etnaviv 0000:00:06.0: Device 14:7a15, irq 93
[    7.906250] etnaviv 0000:00:06.0: model: GC1000, revision: 5037
[    7.906250] [drm] Initialized etnaviv 1.3.0 20151214 for 0000:00:06.0 on minor 1
[    7.906250] parport_pc parport_pc.956: Unable to set coherent dma mask: disabling DMA
[    7.910156] parport_pc parport_pc.888: Unable to set coherent dma mask: disabling DMA
[    7.910156] parport_pc parport_pc.632: Unable to set coherent dma mask: disabling DMA

xorg 崩溃的完整log在附件 error.log

关于龙梦 fedora28 在3A3000主机集显上使用问题:

问题一:我在3A3000主机上不插独显,只用集显安装 Fedora-MATE-Live-5.iso,安装卡住,卡住的具体位置我忘了;使用独显可以安装成功。

问题二: 使用独显可以安装成功,安装成功后拔下独显,mate版使用X Server modesetting driver可正常使用, kde版直接只用集显黑屏,只有鼠标可见可移动。

问题三: 基于GLX/OpenGL的应用,没有硬件加速,都使用的是mesa的llvmpipe,分析了一下应该和DRI2有关。

LIBGL_DEBUG=verbose glxgears -info

libGL: screen 0 does not appear to be DRI2 capable
libGL: Can't open configuration file /etc/drirc: No such file or directory.
libGL: Can't open configuration file /home/suijingfeng/.drirc: No such file or directory.
libGL: Can't open configuration file /etc/drirc: No such file or directory.
libGL: Can't open configuration file /home/suijingfeng/.drirc: No such file or directory.
GL_RENDERER   = llvmpipe (LLVM 8.0, 128 bits)
GL_VERSION    = 3.1 Mesa 19.2.8
GL_VENDOR     = VMware, Inc.
GL_EXTENSIONS = GL_ARB_multisample

这个在我的系统上用你们的内核在mesa18.3.4上做也是这个结果,但是我们的modesetting的效果却好一些,fedora28的modesetting driver使用鼠标拖动窗口有点延迟 :(

问题四:通过修改20-vivante.conf 开启 glamor驱动,可进入桌面,glxinfo 给出的信息显示找到了 etnaviv硬件驱动,但是极其不稳定,黑屏、显示不全、卡死退出到登陆界面,不能正常使用呀,不知道这个问题和上边的 Unable to set coherent dma mask 有没有关系呀 :(

问题五:在测试机主板glmark2-es2-drm跑不了, drmModeGetResources failed。。。

FlyGoat commented 4 years ago

Hi, DMA Mask是parport的,这个驱动没有实际应用,影响不大。

etnaviv+glamor与KDE配合不良是Known Issue. 个人感觉剩下的问题可能是xorg的配置文件乱了。

至于龙梦Fedora28安装卡住问题和mesa无法硬件rendering问题我个人不太使用这个系统,也没有遇到过,难以下手。目前我不在龙梦工作,这方面的问题可以与龙梦方面系统的负责人 Haiyong Sun sunhy@lemote.com 联系。

谢谢。

suijingfeng commented 4 years ago

这是我的xorg.conf

Section "Module"
    Load        "glamoregl"
EndSection

Section "Device"
    Identifier  "loongson-drm"
    Driver      "modesetting"
    BusID       "pci:0@0:6:1"
    Option      "kmsdev" "/dev/dri/card0"
    Option      "AccelMethod" "none"
    Option      "ShadowFB" "true"
    Option      "DoubleShadow"  "true"
    Option      "Atomic" "false"
    Option      "GLVersionOverride" "2.1"
EndSection

Section "OutputClass"
    Identifier  "LOONGSON"
    MatchDriver "loongson-drm"
EndSection

Section "ServerFlags"
    Option      "AutoAddGPU" "false"
    Option      "DRI2" "true"
    Option      "DRI"   "true"
EndSection

Section "Screen"
    Identifier  "Default Screen"
    Device      "loongson-drm"
EndSection
suijingfeng commented 4 years ago

@FlyGoat 谢谢你多次的解答和帮助,从你这里我学到了很多知识。

我想问问你们运行modesetting + glamor 运行成功的经验是在那个系统和配置呢?

FlyGoat commented 4 years ago

@FlyGoat 谢谢你多次的解答和帮助,从你这里我学到了很多知识。

不谢,应该的。 用独显的时候应该可以把整个xorg conf删掉?

我想问问你们运行modesetting + glamor 运行成功的经验是在那个系统和配置呢?

在Fedora28上成功过。后来因为etnaviv问题比较多没怎么继续玩,转投Debian了。Mate基本能用,KDE黑屏/花屏。比较稳定都是wayland实现,Weston跑纯EGL应用很稳。

suijingfeng commented 4 years ago

嗯, 独显既可以用 xf86-video-amdgpu 的 DDX 驱动又可以使用 modesetting + glamor, modesetting + glamor是X Server内置的,xf86-video-amdgpu也会加载glamor模块,相比modesetting他还有自己的依赖器件的特性,xorg.conf 改改 BusID 和 MatchDriver 那里就能用modesetting+glamor了,都删掉会使用 /usr/share/X11/xorg.conf.d/里面的*.conf。

我这里mate却基本不能使用,etnaviv opengl驱动以及内核态驱动还是有点而问题的,估计。

FlyGoat commented 4 years ago

嗯, 独显既可以用 xf86-video-amdgpu 的 DDX 驱动又可以使用 modesetting + glamor, modesetting + glamor是X Server内置的,xf86-video-amdgpu也会加载glamor模块,相比modesetting他还有自己的依赖期间的特性,xorg.conf 改改 BusID 和 MatchDriver 那里就能用nodesetting+glamor了,都删掉会使用 /usr/share/X11/xorg.conf.d/里面的*.conf。

我这里mate却基本不能使用,etnaviv opengl驱动以及内核态驱动还是有点而问题的,估计。

etnaviv也有自己的xorg 2d accl驱动,可以不用glamor。

http://git.arm.linux.org.uk/cgit/xf86-video-armada.git/tree/README?h=unstable-devel

本来想把这个移植了,可惜当时实习时间不够了只做了一半。

suijingfeng commented 4 years ago

这个我也做了一点,就是把 DRM_MODULE_NAMES 由原来的

#define DRM_MODULE_NAMES    "armada-drm", "imx-drm"

变为

define DRM_MODULE_NAMES "armada-drm", "imx-drm", "loongson-drm"

编译过去就可以使用 etnadrm 那个后端了,不开加速正常使用, 开了加速比glamor强点儿(我这边测试,还有的地方不对), 它有三个后端,一个使用etnaviv,另一个使用vivante的正向驱动, 另两个后端还没有编译测试, 就是 drm 部分的ioctl有点儿对不上了。。。 2013, 2015 的到现在的变化有点大了。

鉴于gc1000的性能和etnaviv的稳定性,感觉还是使用xf86-video-armada.git,更靠谱一点。

实习?你还是学生吗?现在就这么历害啦?我看你还是linux内核mips分支的维护者以及给X.Org 提过patch,https://www.mail-archive.com/xorg-devel@lists.x.org/msg57334.html 实在是挺牛的,佩服佩服。

FlyGoat commented 4 years ago

这个我也做了一点,就是把 DRM_MODULE_NAMES 由原来的

#define DRM_MODULE_NAMES  "armada-drm", "imx-drm"

变为

define DRM_MODULE_NAMES "armada-drm", "imx-drm", "loongson-drm"

编译过去就可以使用 etnadrm 那个后端了,不开加速正常使用, 开了加速比glamor强点儿(我这边测试,还有的地方不对), 它有三个后端,一个使用etnaviv,另一个使用vivante的正向驱动, 另两个后端还没有编译测试, 就是 drm 部分的ioctl有点儿对不上了。。。 2013, 2015 的到现在的变化有点大了。

另外两个后端我记得需要Vivante的内核模块。etnadrm是唯一etnaviv驱动可用的。 这个项目代码非常混乱,很多和armada以及指定版本内核ioctl绑定的东西解耦起来很烦。 当时开了加速我记得主要的问题是屏幕半花错乱,伴随GPU Hang Recover,原因是texture upload, GPU BitBLT和Copy的时候MMU未命中。当时反编译读了很多cmdbuf也找不到头绪,向对齐方面排查了很久但无果。我对图形方面的理解还不够深,现学果然还是不靠谱。

现在想来可能是Buffer的Cache一致性没处理好?因为是偶发性的mismatch,个人感觉应该不是 逻辑问题。按我的设计理想情况应该是GPU和驱动都从Cached视角访问主存,不知道实际上有 没有偏差。

鉴于gc1000的性能和etnaviv的稳定性,感觉还是使用xf86-video-armada.git,更靠谱一点。

同意。Mesa的Gallium驱动太复杂了,没有图形学经验不好搞。

实习?你还是学生吗?现在就这么历害啦?我看你还是linux内核mips分支的维护者以及给X.Org 提过patch,https://www.mail-archive.com/xorg-devel@lists.x.org/msg57334.html 实在是挺牛的,佩服佩服。

目前还是学生,知识还很贫乏,过奖了。

谢谢。

FlyGoat commented 4 years ago

如果armada驱动移植有什么进展的话请务必告诉我。还是很希望看到2D加速能好好用起来的。

suijingfeng commented 4 years ago

嗯,好的,我还在处于看代码阶段,我自己往 https://github.com/ProgramingOnLoongson/xf86-video-armada 推点瞎写的代码。

FlyGoat commented 4 years ago

嗯,好的,我还在处于看代码阶段,我自己往 https://github.com/ProgramingOnLoongson/xf86-video-armada 推点瞎写的代码。

请问您是龙芯员工吗?

顺便:一点Debug经验:当内核吐出etnaviv的recover dump的时候可以用这个工具:

https://github.com/etnaviv/etna_viv/blob/master/tools/dump_separate_cmdbuf.py

反汇编当前cmdbuf,快速弄清GPU在执行什么指令。Xorg挂Strace不是很方便,可能这是最简单的方案了。 2D_PIPE指令不多,要按特征追到armada里的bo gen位置还是比较容易的。

suijingfeng commented 4 years ago

我去年9月2号加入loongson的,被召来作mesa和opengl的。

另外两个后端我记得需要Vivante的内核模块

是的,我们公司也有内核模块的代码,就是代码比较老,我在想在那个2D基础上做出逆向的3D加速能更好一些, 2D稳定性很重要。

现在看这个和mesa,libdrm,xf86-video-armada,etnaviv内核态drm驱动都有关系。 我弄不清楚问题在那里,还在学。

我最先怀疑的是用户态和内核接口问题,xf86-video-armada 里边的 etnaviv_drm.h 和 libdrm /etnaviv里边的对不上了都。

diff

我还没到那个阶段呢,我连 loongson3 cpu 是否支持 dma coherent 以及 write combine 等问题都弄不清楚。。。

我在想 GC1000 里边既有2D GC320 又有3D GPU,现有 DRM 能2D和3D同时用吗?

技术太难了,这些代码都够我看3年了。。。

FlyGoat commented 4 years ago

我去年9月2号加入loongson的,被召来作mesa和opengl的。

另外两个后端我记得需要Vivante的内核模块

是的,我们公司也有内核模块的代码,就是代码比较老,我在想在那个2D基础上做出逆向的3D加速能更好一些, 2D稳定性很重要。

armada不依赖mesa。

现在看这个和mesa,libdrm,xf86-video-armada,etnaviv内核态drm驱动都有关系。 我弄不清楚问题在那里,还在学。

我最先怀疑的是用户态和内核接口问题,xf86-video-armada 里边的 etnaviv_drm.h 和 libdrm /etnaviv里边的对不上了都。

diff

我还没到那个阶段呢,我连 loongson3 cpu 是否支持 dma coherent 以及 write combine 等问题都弄不清楚。。。

Loongson-3大部分情况下是被配置成DMA Coherent的。少部分硬件(3B1500 rev < G, 部分双路3A2000, 2K1000)由于Bug需要软件维护DMA一致性。DMA一致性由谁维护由CPU侧的HT接收窗口的配置决定,对于硬件维护DMA一致性的设备必须使用Cached映射访问DMA内存。 对于软件维护一致性的设备则使用Cached映射访问DMA内存时需要手动Inv/Flush Cache,或者使用Uncached映射访问DMA内存。 WriteCombine的话虽然硬件上有支持但是不建议用,在amdgpu上会导致花屏。而且WriteCombine是Uncached映射的变种,对DMA内存无用,可能对外部VRAM比较有用。

我在想 GC1000 里边既有2D GC320 又有3D GPU,现有 DRM 能2D和3D同时用吗?

是这样的,Vivante的GPU有两种硬件配置,第一种是2D核+3D核+VG核 (GC350+GC1000), 第二种是2D 3D二合一核,可以通过PIPE选定2D还是3D管线,龙芯是后者。意味一个核具有2D+3D 功能,但是PIPE间切换有开销。

技术太难了,这些代码都够我看3年了。。。

同感啊,看到你GitHub上的项目似乎比较熟图形栈?我是一窍不通,关于内核和龙芯硬件方面的问题 熟悉一点,有什么不明白的尽管问吧。

FlyGoat commented 4 years ago

目前Lemote内核的Etnaviv方案是晾着外部VRAM不用,所有的Framebuffer和其他BO全部走DMA到内存,过滤成Cached映射。

FlyGoat commented 4 years ago

2D PIPE部分基本可以参考GC320的手册,一些固定寄存器的说明也可以,需要的话留个邮箱吧。

suijingfeng commented 4 years ago

suijingfeng@loongson.cn

suijingfeng commented 4 years ago

Screenshot

X Server-1.20.1, mesa-18.3.4, GC1000, etnaviv, loongson3a3000@1.4ghz

glxgears 1100fps

suijingfeng commented 4 years ago

Screenshot-1

还有点小错误

FlyGoat commented 4 years ago

Screenshot

X Server1.20.1 mesa18.3.4 GC1000 etnaviv, loongson3a3000 1.4ghz

glxgears 1100fps

看一下邮件回你的补丁? 这个是CPU EXA? mesa应该kmsro加上这个设备就好。

suijingfeng commented 4 years ago

这个是CPU EXA?

是的!软件的

mesa应该kmsro加上这个设备就好。

mesa18.3.4 https://github.com/ProgramingOnLoongson/mesa-src-18.3.4 里边还没有kmsro的概念和代码,后来版本才有。

suijingfeng commented 4 years ago

看一下邮件回你的补丁?

软件EXA还是能工作,硬件EXA还是不行,老铁:(

FlyGoat commented 4 years ago

看一下邮件回你的补丁?

软件EXA还是能工作,硬件EXA还是不行,老铁:(

哎 看来也不是一致性问题。Debug Etnaviv头大咯~

suijingfeng commented 4 years ago

我在硬件EXA条件下艰难地截了个图:

Screenshot

suijingfeng commented 4 years ago

dmesg:

[  297.746093] ------------[ cut here ]------------
[  297.750000] WARNING: CPU: 2 PID: 65 at include/linux/dma-fence.h:533 drm_sched_resubmit_jobs+0x208/0x228
[  297.757812] Modules linked in: fuse xt_MASQUERADE tun bridge stp llc xt_tcpudp ipt_REJECT nf_reject_ipv4 xt_conntrack rfkill ebtable_nat ebtable_broute ebtable_filter ebtables iptable_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 iptable_mangle iptable_raw iptable_filter dm_mirror dm_region_hash dm_log ip_tables x_tables
[  297.789062] CPU: 2 PID: 65 Comm: kworker/2:1 Tainted: G        W         5.4.17+ #10
[  297.789062] Workqueue: events drm_sched_job_timedout
[  297.789062] Stack : 98000005fe24fb58 ffffffff802a11a0 ffffffffd500cce0 98000005fe24fab8
[  297.804687]         b6655522ce415240 0000000000000000 0000000000000000 ffffffff81fd8b80
[  297.808593]         ffffffff808bd4d8 0000000000000f67 0000000000000000 0000000000000002
[  297.824218]         ffffffff81fd89f8 0000000000000002 0000000005f5e100 0000000000000f66
[  297.824218]         0000000000000001 ffffffff81fd0000 0000000000000000 0000000000000000
[  297.824218]         ffffffff81ebc738 ffffffffffffff62 0000000000000000 98000005fe424a48
[  297.824218]         98000005fe51b180 000000000000000f ffffffff808bc7a0 0000000028066798
[  297.855468]         ffffffff821b0010 98000005fe24c000 98000005fe24fab0 98000005fe4248f0
[  297.863281]         ffffffff811f836c 0000000000000000 700073746e657665 6666650071775f75
[  297.863281]         0000746e65696369 b6655522ce415240 ffffffff80217558 b6655522ce415240
[  297.863281]         ...
[  297.863281] Call Trace:
[  297.863281] [<ffffffff80217558>] show_stack+0x40/0x130
[  297.863281] [<ffffffff811f836c>] dump_stack+0xac/0xe0
[  297.863281] [<ffffffff8023b340>] __warn+0xc0/0xe8
[  297.898437] [<ffffffff8023b3dc>] warn_slowpath_fmt+0x74/0xc8
[  297.898437] [<ffffffff8092c048>] drm_sched_resubmit_jobs+0x208/0x228
[  297.910156] [<ffffffff80c5f2f4>] etnaviv_sched_timedout_job+0xcc/0x108
[  297.917968] [<ffffffff8092b43c>] drm_sched_job_timedout+0x4c/0xb0
[  297.917968] [<ffffffff8025b078>] process_one_work+0x228/0x468
[  297.917968] [<ffffffff8025b430>] worker_thread+0x178/0x5b0
[  297.917968] [<ffffffff80261e9c>] kthread+0x11c/0x150
[  297.917968] [<ffffffff80210a84>] ret_from_kernel_thread+0x14/0x1c
[  297.945312] ---[ end trace c939be1f2e700cd6 ]---
[  298.121093] etnaviv 0000:00:06.0: MMU fault status 0x00000002
[  298.125000] etnaviv 0000:00:06.0: MMU 0 fault addr 0x00d1adc0
[  299.179687] etnaviv 0000:00:06.0: recover hung GPU!

withpatch.log

suijingfeng commented 4 years ago

挺利害的老铁! 不过从dmesg来看,感觉问题就一个地方,反复都是 MMU fault status。

suijingfeng commented 4 years ago

用我修改的 Fake EXA 吧, 解了一个bug 就. 勉强能用, 用了它 UOS 加速都有了

https://github.com/ProgramingOnLoongson/xf86-video-loongson7a

只需 ./autogen.sh --prefix=/usr , 然后 make install .

后期打算和modesetting 结合起来再改进

Giho-Lee commented 2 years ago

老哥,MMU fault status 0x00000002问题,后续解了吗