龙芯7A1000桥片集成显卡3D功能变得好用啦
杜比
2022年06月09日晚对loongnix进行了系统更新,直观的感觉到集显上运行kde桌面环境变得顺畅了。默认的桌面特效里,透明已经打开,一探究竟,是龙芯提供的etnaviv gc1000内核驱动在起作用。
龙芯桥片7A1000上的内置显卡,一直以来是个备胎角色,性能也一直被人诟病,主要原因之一是它的驱动,一直处于“可用”状态,但并不好用,尤其是它的3D驱动,因为闭源的原因,在linux上工作不稳定。所以在使用集显的情况下,运行桌面环境只能满足显示,而不能使用到OpenGL的硬件加速特性。
现在龙芯提供的etnaviv驱动,基本上解决了这个问题,桌面使用流畅性感觉明显。
目前的驱动状态如下:
# dmesg 的内核引导相关信息
[ 4.179243] etnaviv 0000:00:06.0: etnaviv drm private created
[ 4.179247] etnaviv 0000:00:06.0: DMA mask and the coherent DMA mask: 32
[ 4.179248] etnaviv 0000:00:06.0: dev->dma_parms->max_segment_size = 2G
[ 4.179287] etnaviv 0000:00:06.0: IRQ registered, irq=41
[ 4.179292] etnaviv 0000:00:06.0: Unbalanced pm_runtime_enable!
[ 4.179405] etnaviv 0000:00:06.0: Number of GPU: 1
[ 4.179415] etnaviv 0000:00:06.0: model: GC1000, revision: 5037
[ 4.179447] etnaviv 0000:00:06.0: with MC2.0
[ 4.179449] etnaviv 0000:00:06.0: with PIPE 3D
[ 4.179450] etnaviv 0000:00:06.0: with PIPE 2D
[ 4.179451] etnaviv 0000:00:06.0: dma mask: 0xffffffff
[ 4.179452] etnaviv 0000:00:06.0: PHYS_OFFSET: 0x0
[ 4.179454] etnaviv 0000:00:06.0: gpu memory base: 0x80000000
[ 4.179592] etnaviv 0000:00:06.0: GPU Initialized
[ 4.179718] [drm] Initialized etnaviv 1.2.0 20151214 for 0000:00:06.0 on minor 1
# 内核加载信息
etnaviv 278528 1
gpu_sched 147456 1 etnaviv
# 设备映射信息
/dev/dri
├── by-path
│ ├── pci-0000:00:06.0-card -> ../card1
│ ├── pci-0000:00:06.0-render -> ../renderD128
│ └── pci-0000:00:06.1-card -> ../card0
├── card0
├── card1
└── renderD128
也查看了下内核的config信息,在最新版内核里,包含有etnaviv编译选项,是以加载模块提供的,而上一个版本内核etnaviv编译选项并未配置。
cat config-4.19.0-17-loongson-3 | grep VIV
CONFIG_VIDEO_VIVID=m
CONFIG_VIDEO_VIVID_CEC=y
CONFIG_VIDEO_VIVID_MAX_DEVS=64
CONFIG_DRM_ETNAVIV=m
CONFIG_DRM_ETNAVIV_PCI_DRIVER=y
CONFIG_DRM_ETNAVIV_THERMAL=y
子扉
vivante的etna_viv驱动遵循GPL开源了。包括内核的etnaviv驱动,和用户空间的、Gallium的etnaviv驱动的libdrm库和mesa库。支持从vivante GC400、GC800、GC1000、GC2000、GC4000等的GPU IP核心。而且benchmark的成绩比较以前的专属闭源驱动有提高。且相关代码已经合并到了mesa、drm、linux的上游官方代码库,且早已经发布了。
详情访问:
https://github.com/etnaviv/etna_viv
https://gitlab.freedesktop.org/mesa/mesa
https://gitlab.freedesktop.org/mesa/drm
Linux内核
vivante GC1000 GPU IP应该支持OpenGL到2.1版本。(wikipedia)
所以,实非Loongson驱动之功;乃是etnaviv驱动之力。
说到底,让人对7A1000更有信心了,不一定非要等7A2000和7A2000的GPU的开放文档了,7A2000和其GPU的路太长。7A1000的GPU也是开源的么。
另外,图芯(vivante)被 芯原 (VeriSilicon)收购好久了。
杜比
子扉 7A1000的GC1000,在桥片里是pci总线设备,看之前的提交记录,龙芯对设备接口进行了pci封装。github上的驱动,是普遍性的SOC片上模块驱动,没法拿来就用。
CONFIG_DRM_ETNAVIV_PCI_DRIVER=y
淡炒番茄
龙芯在这个驱动的贡献就是在龙芯平台上使能gc1000,内核和mesa驱动的补丁还没有进入主线。
子扉
啊,原来如此。
时空质能
子扉 龙芯的显示控制器是自己写的,图形核心(gpu核)是gc1000
淡炒番茄
龙芯的显示器控制器有两个版本的驱动:
一个是loongson-drm: https://lore.kernel.org/lkml/202206251930.GbwGAcFG-lkp@intel.com/T/#m30a420cb8c4a8d8540e7ee7b988346135246b541
另一个是lsdc : https://lore.kernel.org/lkml/20220402090252.1700974-1-15330273260@189.cn/
不知道loongnix是哪个驱动?
杜比
淡炒番茄 看5.19上的代码,应该是第一个,在loongnix上能看到lsdc
还有一点,loongson-drm 在新固件环境ArchLinux上,实际观察看,已不做为一个可加载gpu drm模块。