我正在把龙芯独显驱动的内核模块gsgpu移植到最新的主线内核上
杜比
autistic-chad
https://github.com/loongson/Firmware
https://gitee.com/loongson/Firmware/tree/main/5000Series/Laptop/LM-A2207
这两个地址都可以下载固件和提issues
如果能进到固件的shell,有个spi命令,可以刷固件
如果无法进到shell,但系统启动正常,有个工具可用,
如果里面提供的二进制可执行文件不工作,可重新编译生成
https://github.com/MarsDoge/OsTools
https://gitee.com/bexsder/OsTools
休眠到磁盘上这个功能,在天创笔记本上偶尔无效,大概率反应很迟缓,往往要等到耐心极限,不只是固件的锅。
用上游内核,包括在pc机上,默认情况下,进入Hibernate很快,恢复也大多不正常。
记得之前有人提到过,从Hibernate恢复,唤醒链有一定的相关性,反应迟钝和等待部件加电状态相关,目前没有进一步的信息。
autistic-chad
杜比 在刷了n次固件之后我貌似已经定位到破坏天创者笔记本固件的元凶了,原厂代码中有一行 *(int *)(0x80000e0010010444) |= 0x10;
这一行在驱动初始化和从休眠中恢复的时候都会调用。我不知道这一行原本的目的到底是修改哪个寄存器,但这应该是龙芯工程师在调试的时候加上去的,然后发布最终代码的时候不小心没删掉。因为不同的系统中物理地址空间中的io映射是不一样的,而这个地址在天创者笔记本上正好对应的是固件映射在物理地址空间中的页面(我升级了16G内存和无线网卡,没升级的机器可能不对应这个页面),所以这行代码就破坏了天创者笔记本的固件。这一点经过我刷了n多次固件后证实,只要执行这一行代码,固件必然挂掉。
@yetist 我已经push了相关的fix(就是直接把这行删掉,我大不清楚龙芯工程师原本的意图是什么,不过去掉了貌似没啥影响)到我的github repo。我正在打包中,马上上传prebuilt packages。
杜比
autistic-chad 周末在天创者笔记本上测试了一下,使用archlinux的livecd ver 10.10安装,整理如下:
- livecd可以启动引导到桌面环境,不需要nomodeset开关选项,loongson的drm驱动正常工作
- 安装过程中,进入分区选择步骤黑屏,应该是个提示信息,按回车,可以显示分区方案
- 配置lightdm为登录管理器,可以登录xfce4和mate,plasma白屏
- 使用sddm登录管理器时,白屏,无法继续
- 使用 pacman -U 安装 gsgpu 相关软件包,修改/boot/grub/grub.conf,添加gsgpu引导选项
- 使用gsgpu驱动可以进入系统,可以使用lightdm和deepin的登录管理器,sddm黑屏
- 使用gsgpu驱动可以进入mate和xfce4,plasma黑屏
- 在xfce4环境下,启动plasma配置程序黑屏
从表现的现象推断,涉及opengl的模块黑屏,转换成软件模拟,可以工作
在debian上也做了相关测试,用楼主的patch,编译内核,可以工作
淡炒番茄
这个代码真厉害。
autistic-chad
淡炒番茄 正式发布的内核模块能出现这行代码某种程度上也反映出龙芯相关团队内部的开发管理流程有很大问题,这种调试代码能check in到repo而且能通过code review本身就是很严重的管理体系上的疏漏(我甚至有理由怀疑他们code review估计就是走个形式,聊胜于无),或者也可能是为了发布进度赶工过于着急。所以为了代码质量,我还是呼吁龙芯公司早日开源用户空间的3D驱动,让社区一起改进代码吧。
当然这其实也是固件本身的一个bug,这个页面需要设置成只读它给设置成可读写了。原则上说内核不管做啥(除了直接访问spi之外)都不应该能破坏固件。
ghw
autistic-chad 😆 群里有个大佬测试3A6000的固件输出里有3A5000字样
autistic-chad
ghw 哈哈估计是赶工没注意,忘了改了,最先关注的肯定是功能上的实现,这种字符串错误优先级肯定比较低。其实也没有办法,和国外fabless大厂相比龙芯毕竟非常缺钱和缺人力,所以其实最好的办法是开源,让社区一起搞。
淡炒番茄
其实固件是没法开源的,外面的人也没法搞。像Intel也是FSP的二进制发布到社区,然后可以开发Uboot,coreboot,Linuxboot等。
yetist
出现黑屏现象,主要是3D用不了,跑glxgears即可验证。
autistic-chad
杜比 yetist 对出现黑屏的原因是没有用户空间的3D驱动,所以桌面环境只要用了OpenGL或Vulkan必然黑屏。2D软件渲染是可用的。这个只能等龙芯开源3D驱动了,大家先用2D桌面环境吧(话说7A2000显卡的3D性能估计也带不动3D桌面,当然可能简单的特效估计还行)。loongson DRM 也能用是因为我给 xserver 打的补丁 https://github.com/loongarchlinux/extra/pull/3 同时修复了 xf86-video-modesetting 在 loongson DRM driver 和在 gsgpu 下的适配问题。这个补丁我今晚就给上游推送,最近有点忙我忘了 😅 。
autistic-chad
新增 gsgpu-devel branch,track 上游最新的主线内核 (现在是 v6.7-rc2),所有的后续开发工作也会在 gsgpu-devel branch进行。gsgpu branch 是稳定版 (v6.6 内核),除了大的bug fix以外不会随意改动,在 v6.7 发布后我会把 gsgpu branch 指向到时候最新的稳定版。
ghw
autistic-chad 😄 小声哔哔,能顺便把7A2000的网卡合并进来嘛 😅 😅 😅
autistic-chad
ghw 我的天创者笔记本网卡是自动就识别了,不需要out of tree驱动?你说的这个要移植的驱动叫什么?
ghw
autistic-chad
ghw 噢噢就一个commit对吧?不是整个驱动。我回家看一下,应该直接rebase一下就行了
autistic-chad
ghw https://github.com/cl91/linux/tree/gsgpu-with-dwmac-fix 我cherry-pick 了两个相关的commit,没怎么测试,你可以试试。话说 loongarchlinux 的内核 https://github.com/loongarchlinux/linux/commits/la64/6.6.0/release 已经合并 gsgpu 驱动了,所以你其实直接用这个内核 tree 就行了。
yetist
根据测试评估结果,loongarchlinux 的 6.7-rc2 内核已经默认开启此驱动,并关闭了另一个驱动。
autistic-chad
yetist 另外一个驱动(叫loongson)貌似还能支持 7A1000 的 display controller。我没有7A1000 系统所以不是很清楚,关掉 loongson 后 7A1000 还有驱动不?貌似龙芯内部的人给上游的 etnaviv 做了适配 ( https://www.phoronix.com/news/Loongson-Etnaviv-PCI-Driver ),所以可能 etnaviv 驱动能支持 7A1000,但我没有7A1000所以我没法测试。
autistic-chad
@yetist gsgpu-devel 已经 rebase 到 Linux v6.7-rc7
yetist
好,安排
autistic-chad
yetist gsgpu-devel branch 已经更新到v6.8-rc2, 主要是drm scheduler的几个比较trivial的API变化. gsgpu branch 更新到 v6.7 正式版.