一直以来,Collabora公司都致力于为 Arm Mali Bifrost架构和 Midgard架构开发Panfrost 开源的 GPU 驱动程序,而且他们也获得了 Arm 的官方支持。
但很显然,这种支持并不包括Mali-G78 GPU 和其他 Arm Valhall Mali GPU的文档。因为我发现,Collabora对 Mali-G78 进行了大约一个月的逆向工程,而且发布了有关 Valhall 指令集的文档 ( PDF )。

逆向工程的其他结果包括可由程序解析的XML 架构描述,以及用作逆向工程辅助工具的 Valhall汇编器和反汇编器。
除了 Mali-G78“Borr”GPU,这项工作也适用于其他的Valhall GPU,包括 Mali-G77 “TryM”、Mali-G57“Natt-A/B”、Mali-G68“Ottr”和适用于汽车和工业应用的Mali-G78AE“Borr-AE”。
Collabora公司Mali GPU自由驱动项目的负责人Alyssa Rosenzweig 解释说:“因为Collabora的工作是基于三星的 Galaxy S21,因为了该手机采用了三星 Exynos 2100 SoC,并配备了Mali-G78 MP14 GPU。”她指出,虽然Android 上的逆向工程工作比 Linux 上的更难,但这是目前唯一的选择。
目前,该团队正在设法使用包装库识别每一层,该包装库转储执行每个着色器,从而对新指令集进行逆向工程,并开发反汇编器。
他们也从一些公开的信息中得到了帮助,尤其是 Anandtech的一篇文章,该文章中描述了有关 Valhall 的有用信息:
- 基于 Warp,就像 Bifrost,但每个 Warp 有 16 个线程,而不是 Bifrost 的 4/8
- 在指令级别与 Bifrost 同构(“操作等效”)
- 定期编码
- 扁平,缺少 Bifrost 条款和元组封装
- 16KB 指令缓存,容纳 2048 条指令
获取指令集文档、汇编器和反汇编器是让 Panfrost 支持 Valhall GPU 的第一步。Alyssa 还指出,Mali G78 确实带来了指令集以外的变化。比如:明显不同的数据结构,减少了 Vulkan 驱动程序的开销。而且很幸运的是,许多数据结构可以从 Bifrost 中进行调整,而且只需要对 Mesa 驱动程序进行很少的更改就能实现。Alyssa还邀请了使用 Valhall GPU 设计 Linux设备的人员或公司与 Collabora多联系、交流,从而帮助他们获得开源 Linux 驱动程序。
查看Collabora 的帖子可以了解详情。

文章翻译者:Jacob,嵌入式系统测试工程师、RAK高级工程师,物联网行业多年工作经验,熟悉嵌入式开发、测试各个环节,对不同产品有自己专业的分析与评估。