Atlas 200I A2 加速模块-GPU适配
1.dts
以下默认目录为"Ascend310B-source",编辑"dtb/dts/hi1910b/hi1910BL/base/hi1910B-gpu.dtsi"修改内容如下:
mali@404000000 {compatible = "arm,malit6xx", "arm,mali-bifrost";reg = <0x4 0x4000000 0x0 0x4000>;interrupt-parent = <&mbigen_gpu>;interrupts = <0x2ec 0x4 0x2ed 0x4 0x2ee 0x4>;// interrupt-names = "JOB", "MMU", "GPU";interrupt-names = "job", "mmu", "gpu";physical-memory-group-manager = <&caf_memory_manager>;};
2.panfrost驱动
源码中的panfrost驱动无法正常驱动,会提示时钟初始化失败。
关于panfrost升腾提供了patch,在编译过程将patch合入内核源码,具体操作如下:
(1).下载patch.
GPU驱动补丁下载
(2).复制patch到kernel/kernel/kernel/patches/目录下。
(3).修改编译脚本build.sh

(4).修改内核配置,使能panfrost。
vim kernel/kernel/kernel/kbuild/defconfigs/arch/arm64/configs/ascend310B_defconfig# 修改以下两个配置宏
CONFIG_DRM_HISI_ASCEND310B=y
CONFIG_DRM_PANFROST=m
(5)."build.sh kernel"和"build.sh dtb"对内核和dts进行编译,编译完成后在output/kernel_modules/ 下生成驱动panfrost.ko、gpu-sched.ko。在output/下会生成Image、dt.img。
3.mesa库编译
mesa库编译需要在目标系统中完成,修改/etc/apt/sources.list.d/sources.list,将"deb-src"的注释取消,如果没有去官方提供的base系统中找。修改后如下:

执行下面命令,获取mesa源码。
apt-get update
apt-get source mesa
进入源码目录,执行如下修改:
$ cd mesa-23.2.1/
$ vim src/gallium/targets/dri/meson.build
foreach d : [[with_gallium_kmsro, ['armada-drm_dri.so',
# 部分内容省略 #'ingenic-drm_dri.so','kirin_dri.so','atlas-200a2_dri.so', #添加的内容'komeda_dri.so',
# 部分内容省略 #$ vim src/gallium/targets/dri/target.c
#if defined(GALLIUM_KMSRO)
/* 部分内容省略 */
DEFINE_LOADER_DRM_ENTRYPOINT(ingenic_drm)
DEFINE_LOADER_DRM_ENTRYPOINT(kirin)
DEFINE_LOADER_DRM_ENTRYPOINT(atlas_200a2) #添加的内容
DEFINE_LOADER_DRM_ENTRYPOINT(komeda)
/* 部分内容省略 */
修改完成后可通过下面命令进行编译;
#下面命令请在源码目录下执行
sudo apt build-dep . #下载编译依赖包
sudo apt install fakeroot
sudo DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage -rfakeroot -b -d -us -uc #编译
编译完成后会在上一级目录中生成debian的安装包。

4.部署(注意:在这之前要确保系统可正常显示。)
(1).上传dt.img、Image、panfrost.ko、gpu-sched.ko到系统中。
(2).更新系统dts和内核镜像;
dd if=dt.img of=/dev/mmcblk0 count=4096 seek=114688 bs=512
dd if=Image of=/dev/mmcblk0 count=61440 seek=32768 bs=512
(3).设置开机自动加载驱动;
$ cp panfrost.ko /var/davinci/driver/
$ cp gpu-sched.ko /var/davinci/driver/
$ vim /var/davinci/scripts/minirc_sys_init_ext.sh #如果没有写权限,先通过chmod添加写权限
load_device_modules()
{echo "load device ext modules"/* 部分内容省略 *//* 增加下面三项内容,其中第一个项和drm显示有关。 */ko_check ${ko_path}/ascend_vdp_drm.koko_check ${ko_path}/gpu-sched.koko_check ${ko_path}/panfrost.koecho "finish load device ext modules"
}
(4).安装mesa,在之前mesa生成的debian安装包目录下执行下面命令,安装mesa库。
apt-get install -fy --allow-downgrades ./*.deb
5.测试

glxinfo测试

glmark2测试

参考连接:
https://www.hiascend.com/forum/thread-0297192955825899818-1-1.html
