[Letux-kernel] Lay common foundation to make PVR/SGX work without hacks on OMAP34xx, OMAP36xx, AM335x and potentially OMAP4, OMAP5
Paweł Chmiel
pawel.mikolaj.chmiel at gmail.com
Wed Feb 13 17:45:18 CET 2019
śr., 13 lut 2019 o 17:33 H. Nikolaus Schaller <hns at goldelico.com> napisał(a):
>
> Hi Pawel,
>
> > Am 13.02.2019 um 08:36 schrieb Paweł Chmiel <pawel.mikolaj.chmiel at gmail.com>:
> >
> > Do You have strace of pvrsrvinit run ? They should be almost identical to one which i have.
>
> I have digged out a version where pvrsrvinit succeeds on our omap3530 based gta04 board (kernel 4.15.17).
>
> oot at letux:~# strace pvrsrvctl --start --no-module
> execve("/usr/local/bin/pvrsrvctl", ["pvrsrvctl", "--start", "--no-module"], [/* 14 vars */]) = 0
> brk(0) = 0x12000
> uname({sys="Linux", node="letux", ...}) = 0
> access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
> mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6efd000
> access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
> open("/usr/local/XSGX/lib/tls/v7l/neon/vfp/libsrv_init.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> stat64("/usr/local/XSGX/lib/tls/v7l/neon/vfp", 0xbeb3d420) = -1 ENOENT (No such file or directory)
> open("/usr/local/XSGX/lib/tls/v7l/neon/libsrv_init.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> stat64("/usr/local/XSGX/lib/tls/v7l/neon", 0xbeb3d420) = -1 ENOENT (No such file or directory)
> open("/usr/local/XSGX/lib/tls/v7l/vfp/libsrv_init.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> stat64("/usr/local/XSGX/lib/tls/v7l/vfp", 0xbeb3d420) = -1 ENOENT (No such file or directory)
> open("/usr/local/XSGX/lib/tls/v7l/libsrv_init.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> stat64("/usr/local/XSGX/lib/tls/v7l", 0xbeb3d420) = -1 ENOENT (No such file or directory)
> open("/usr/local/XSGX/lib/tls/neon/vfp/libsrv_init.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> stat64("/usr/local/XSGX/lib/tls/neon/vfp", 0xbeb3d420) = -1 ENOENT (No such file or directory)
> open("/usr/local/XSGX/lib/tls/neon/libsrv_init.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> stat64("/usr/local/XSGX/lib/tls/neon", 0xbeb3d420) = -1 ENOENT (No such file or directory)
> open("/usr/local/XSGX/lib/tls/vfp/libsrv_init.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> stat64("/usr/local/XSGX/lib/tls/vfp", 0xbeb3d420) = -1 ENOENT (No such file or directory)
> open("/usr/local/XSGX/lib/tls/libsrv_init.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> stat64("/usr/local/XSGX/lib/tls", 0xbeb3d420) = -1 ENOENT (No such file or directory)
> open("/usr/local/XSGX/lib/v7l/neon/vfp/libsrv_init.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> stat64("/usr/local/XSGX/lib/v7l/neon/vfp", 0xbeb3d420) = -1 ENOENT (No such file or directory)
> open("/usr/local/XSGX/lib/v7l/neon/libsrv_init.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> stat64("/usr/local/XSGX/lib/v7l/neon", 0xbeb3d420) = -1 ENOENT (No such file or directory)
> open("/usr/local/XSGX/lib/v7l/vfp/libsrv_init.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> stat64("/usr/local/XSGX/lib/v7l/vfp", 0xbeb3d420) = -1 ENOENT (No such file or directory)
> open("/usr/local/XSGX/lib/v7l/libsrv_init.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> stat64("/usr/local/XSGX/lib/v7l", 0xbeb3d420) = -1 ENOENT (No such file or directory)
> open("/usr/local/XSGX/lib/neon/vfp/libsrv_init.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> stat64("/usr/local/XSGX/lib/neon/vfp", 0xbeb3d420) = -1 ENOENT (No such file or directory)
> open("/usr/local/XSGX/lib/neon/libsrv_init.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> stat64("/usr/local/XSGX/lib/neon", 0xbeb3d420) = -1 ENOENT (No such file or directory)
> open("/usr/local/XSGX/lib/vfp/libsrv_init.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> stat64("/usr/local/XSGX/lib/vfp", 0xbeb3d420) = -1 ENOENT (No such file or directory)
> open("/usr/local/XSGX/lib/libsrv_init.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> stat64("/usr/local/XSGX/lib", 0xbeb3d420) = -1 ENOENT (No such file or directory)
> open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
> fstat64(3, {st_mode=S_IFREG|0644, st_size=45046, ...}) = 0
> mmap2(NULL, 45046, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb6ef2000
> close(3) = 0
> access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
> open("/usr/lib/libsrv_init.so", O_RDONLY|O_CLOEXEC) = 3
> read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0<\7\0\0004\0\0\0"..., 512) = 512
> lseek(3, 94656, SEEK_SET) = 94656
> read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1040) = 1040
> lseek(3, 94346, SEEK_SET) = 94346
> read(3, "A6\0\0\0aeabi\0\1,\0\0\0\0057-A\0\6\n\7A\10\1\t\2\n\4\22"..., 55) = 55
> fstat64(3, {st_mode=S_IFREG|0755, st_size=95696, ...}) = 0
> mmap2(NULL, 127076, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6eb8000
> mprotect(0xb6ecf000, 28672, PROT_NONE) = 0
> mmap2(0xb6ed6000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x16000) = 0xb6ed6000
> close(3) = 0
> access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
> open("/lib/arm-linux-gnueabihf/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
> read(3, "\177ELF\1\1\1\3\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0Mw\1\0004\0\0\0"..., 512) = 512
> lseek(3, 908188, SEEK_SET) = 908188
> read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 2880) = 2880
> lseek(3, 904740, SEEK_SET) = 904740
> read(3, "A4\0\0\0aeabi\0\1*\0\0\0\0057-A\0\6\n\7A\10\1\t\2\n\3\f"..., 53) = 53
> fstat64(3, {st_mode=S_IFREG|0755, st_size=911068, ...}) = 0
> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6ef1000
> mmap2(NULL, 980392, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6dc8000
> mprotect(0xb6ea3000, 61440, PROT_NONE) = 0
> mmap2(0xb6eb2000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xda000) = 0xb6eb2000
> mmap2(0xb6eb5000, 9640, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb6eb5000
> close(3) = 0
> access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
> open("/usr/lib/libsrv_um.so", O_RDONLY|O_CLOEXEC) = 3
> read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\340#\0\0004\0\0\0"..., 512) = 512
> lseek(3, 168544, SEEK_SET) = 168544
> read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1120) = 1120
> lseek(3, 168210, SEEK_SET) = 168210
> read(3, "A6\0\0\0aeabi\0\1,\0\0\0\0057-A\0\6\n\7A\10\1\t\2\n\4\22"..., 55) = 55
> fstat64(3, {st_mode=S_IFREG|0755, st_size=169664, ...}) = 0
> mmap2(NULL, 200992, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6d96000
> mprotect(0xb6dbe000, 28672, PROT_NONE) = 0
> mmap2(0xb6dc5000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x27000) = 0xb6dc5000
> close(3) = 0
> access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
> open("/lib/arm-linux-gnueabihf/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
> read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\240\t\0\0004\0\0\0"..., 512) = 512
> lseek(3, 8664, SEEK_SET) = 8664
> read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1160) = 1160
> lseek(3, 8328, SEEK_SET) = 8328
> read(3, "A4\0\0\0aeabi\0\1*\0\0\0\0057-A\0\6\n\7A\10\1\t\2\n\4\22"..., 53) = 53
> fstat64(3, {st_mode=S_IFREG|0644, st_size=9824, ...}) = 0
> mmap2(NULL, 73912, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6d83000
> mprotect(0xb6d85000, 61440, PROT_NONE) = 0
> mmap2(0xb6d94000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1000) = 0xb6d94000
> close(3) = 0
> access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
> open("/lib/arm-linux-gnueabihf/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
> read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0EQ\0\0004\0\0\0"..., 512) = 512
> lseek(3, 100684, SEEK_SET) = 100684
> read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1520) = 1520
> lseek(3, 65940, SEEK_SET) = 65940
> read(3, "A4\0\0\0aeabi\0\1*\0\0\0\0057-A\0\6\n\7A\10\1\t\2\n\4\22"..., 53) = 53
> fstat64(3, {st_mode=S_IFREG|0755, st_size=102204, ...}) = 0
> mmap2(NULL, 139836, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6d60000
> mprotect(0xb6d70000, 61440, PROT_NONE) = 0
> mmap2(0xb6d7f000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xf000) = 0xb6d7f000
> mmap2(0xb6d81000, 4668, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb6d81000
> close(3) = 0
> access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
> open("/lib/arm-linux-gnueabihf/librt.so.1", O_RDONLY|O_CLOEXEC) = 3
> read(3, "\177ELF\1\1\1\3\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0@\30\0\0004\0\0\0"..., 512) = 512
> lseek(3, 21260, SEEK_SET) = 21260
> read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1320) = 1320
> lseek(3, 20868, SEEK_SET) = 20868
> read(3, "A4\0\0\0aeabi\0\1*\0\0\0\0057-A\0\6\n\7A\10\1\t\2\n\4\22"..., 53) = 53
> fstat64(3, {st_mode=S_IFREG|0644, st_size=22580, ...}) = 0
> mmap2(NULL, 86588, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6d4a000
> mprotect(0xb6d4f000, 61440, PROT_NONE) = 0
> mmap2(0xb6d5e000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x4000) = 0xb6d5e000
> close(3) = 0
> access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
> open("/lib/arm-linux-gnueabihf/libgcc_s.so.1", O_RDONLY|O_CLOEXEC) = 3
> read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\230\321\0\0004\0\0\0"..., 512) = 512
> lseek(3, 99900, SEEK_SET) = 99900
> read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1120) = 1120
> lseek(3, 99568, SEEK_SET) = 99568
> read(3, "A2\0\0\0aeabi\0\1(\0\0\0\0057-A\0\6\n\7A\10\1\t\2\n\4\22"..., 51) = 51
> fstat64(3, {st_mode=S_IFREG|0644, st_size=101020, ...}) = 0
> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6ef0000
> mmap2(NULL, 165160, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6d21000
> mprotect(0xb6d3a000, 61440, PROT_NONE) = 0
> mmap2(0xb6d49000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x18000) = 0xb6d49000
> close(3) = 0
> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6d20000
> set_tls(0xb6d204c0, 0xb6f00058, 0xb6d20ba8, 0xb6d204c0, 0xb6f00058) = 0
> mprotect(0xb6eb2000, 8192, PROT_READ) = 0
> mprotect(0xb6d7f000, 4096, PROT_READ) = 0
> mprotect(0xb6d5e000, 4096, PROT_READ) = 0
> mprotect(0xb6d94000, 4096, PROT_READ) = 0
> mprotect(0xb6dc5000, 8192, PROT_READ) = 0
> mprotect(0xb6ed6000, 4096, PROT_READ) = 0
> mprotect(0x10000, 4096, PROT_READ) = 0
> mprotect(0xb6eff000, 4096, PROT_READ) = 0
> munmap(0xb6ef2000, 45046) = 0
> set_tid_address(0xb6d20068) = 2672
> set_robust_list(0xb6d20070, 12) = 0
> rt_sigaction(SIGRTMIN, {0xb6d64d9d, [], SA_RESTORER|SA_SIGINFO, 0xb6deeb01}, NULL, 8) = 0
> rt_sigaction(SIGRT_1, {0xb6d64cbd, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0xb6deeb01}, NULL, 8) = 0
> rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
> getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0
> brk(0) = 0x12000
> brk(0x33000) = 0x33000
> open("/dev/pvrsrvkm", O_RDWR) = 3
> fcntl64(3, F_SETFD, FD_CLOEXEC) = 0
> ioctl(3, 0xc01c670c, 0xbeb3e9bc) = 0
> ioctl(3, 0xc01c6744, 0xbeb3e9fc) = 0
> ioctl(3, 0xc01c6700, 0xbeb3e8a4) = 0
> ioctl(3, 0xc01c6701, 0xbeb3e90c) = 0
> ioctl(3, 0xc01c6763, 0xbeb3e614) = 0
> ioctl(3, 0xc01c6706, 0xbeb3e824) = 0
> ioctl(3, 0xc01c670b, 0xbeb3e7e4) = 0
> mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_SHARED, 3, 0x80000005000) = 0xb6efb000
> ioctl(3, 0xc01c6706, 0xbeb3e824) = 0
> ioctl(3, 0xc01c670b, 0xbeb3e7e4) = 0
> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, 3, 0x80000006000) = 0xb6efa000
> ioctl(3, 0xc01c6706, 0xbeb3e824) = 0
> ioctl(3, 0xc01c670b, 0xbeb3e7e4) = 0
> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, 3, 0x80000007000) = 0xb6ef9000
> ioctl(3, 0xc01c6706, 0xbeb3e824) = 0
> ioctl(3, 0xc01c670b, 0xbeb3e7e4) = 0
> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, 3, 0x80000008000) = 0xb6ef8000
> ioctl(3, 0xc01c6706, 0xbeb3e824) = 0
> ioctl(3, 0xc01c670b, 0xbeb3e7e4) = 0
> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, 3, 0x80000009000) = 0xb6ef7000
> ioctl(3, 0xc01c6706, 0xbeb3e824) = 0
> ioctl(3, 0xc01c670b, 0xbeb3e7e4) = 0
> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, 3, 0x8000000a000) = 0xb6ef6000
> ioctl(3, 0xc01c6706, 0xbeb3e80c) = 0
> ioctl(3, 0xc01c670b, 0xbeb3e7cc) = 0
> mmap2(NULL, 28672, PROT_READ|PROT_WRITE, MAP_SHARED, 3, 0x8000000b000) = 0xb6d19000
> open("/etc/powervr.ini", O_RDONLY) = -1 ENOENT (No such file or directory)
> open("powervr.ini", O_RDONLY) = -1 ENOENT (No such file or directory)
> ioctl(3, 0xc01c6706, 0xbeb3e80c) = 0
> ioctl(3, 0xc01c670b, 0xbeb3e7cc) = 0
> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, 3, 0x8000000c000) = 0xb6ef5000
> ioctl(3, 0xc01c6706, 0xbeb3e80c) = 0
> ioctl(3, 0xc01c670b, 0xbeb3e7cc) = 0
> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, 3, 0x8000000d000) = 0xb6ef4000
> ioctl(3, 0xc01c6706, 0xbeb3e7fc) = 0
> ioctl(3, 0xc01c670b, 0xbeb3e7bc) = 0
> mmap2(NULL, 24576, PROT_READ|PROT_WRITE, MAP_SHARED, 3, 0x8000000e000) = 0xb6d13000
> ioctl(3, 0xc01c6706, 0xbeb3e7fc) = 0
> ioctl(3, 0xc01c670b, 0xbeb3e7bc) = 0
> mmap2(NULL, 24576, PROT_READ|PROT_WRITE, MAP_SHARED, 3, 0x8000000f000) = 0xb6d0d000
> ioctl(3, 0xc01c6706, 0xbeb3e7fc) = 0
> ioctl(3, 0xc01c670b, 0xbeb3e7bc) = 0
> mmap2(NULL, 20480, PROT_READ|PROT_WRITE, MAP_SHARED, 3, 0x80000010000) = 0xb6d08000
> ioctl(3, 0xc01c6706, 0xbeb3e7fc) = 0
> ioctl(3, 0xc01c670b, 0xbeb3e7bc) = 0
> mmap2(NULL, 24576, PROT_READ|PROT_WRITE, MAP_SHARED, 3, 0x80000011000) = 0xb6d02000
> ioctl(3, 0xc01c6706, 0xbeb3e824) = 0
> ioctl(3, 0xc01c670b, 0xbeb3e7e4) = 0
> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, 3, 0x80000012000) = 0xb6ef3000
> ioctl(3, 0xc01c6706, 0xbeb3e824) = 0
> ioctl(3, 0xc01c670b, 0xbeb3e7e4) = 0
> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, 3, 0x80000013000) = 0xb6ef2000
> ioctl(3, 0xc01c6706, 0xbeb3e824) = 0
> ioctl(3, 0xc01c670b, 0xbeb3e7e4) = 0
> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, 3, 0x80000014000) = 0xb6d01000
> ioctl(3, 0xc01c6706, 0xbeb3e824) = 0
> ioctl(3, 0xc01c670b, 0xbeb3e7e4) = 0
> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, 3, 0x80000015000) = 0xb6d00000
> ioctl(3, 0xc01c6706, 0xbeb3e824) = 0
> ioctl(3, 0xc01c670b, 0xbeb3e7e4) = 0
> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, 3, 0x80000016000) = 0xb6cff000
> ioctl(3, 0xc01c6706, 0xbeb3e824) = 0
> ioctl(3, 0xc01c6706, 0xbeb3e824) = 0
> ioctl(3, 0xc01c671b, 0xbeb3e8dc) = 0
> munmap(0xb6efb000, 8192) = 0
> ioctl(3, 0xc01c671b, 0xbeb3e8dc) = 0
> munmap(0xb6efa000, 4096) = 0
> ioctl(3, 0xc01c671b, 0xbeb3e8dc) = 0
> munmap(0xb6ef9000, 4096) = 0
> ioctl(3, 0xc01c671b, 0xbeb3e8dc) = 0
> munmap(0xb6ef7000, 4096) = 0
> ioctl(3, 0xc01c671b, 0xbeb3e8dc) = 0
> munmap(0xb6ef8000, 4096) = 0
> ioctl(3, 0xc01c671b, 0xbeb3e8dc) = 0
> munmap(0xb6ef6000, 4096) = 0
> ioctl(3, 0xc01c671b, 0xbeb3e8dc) = 0
> munmap(0xb6d19000, 28672) = 0
> ioctl(3, 0xc01c671b, 0xbeb3e8dc) = 0
> munmap(0xb6ef5000, 4096) = 0
> ioctl(3, 0xc01c671b, 0xbeb3e8dc) = 0
> munmap(0xb6ef4000, 4096) = 0
> ioctl(3, 0xc01c671b, 0xbeb3e8dc) = 0
> munmap(0xb6d13000, 24576) = 0
> ioctl(3, 0xc01c671b, 0xbeb3e8dc) = 0
> munmap(0xb6d0d000, 24576) = 0
> ioctl(3, 0xc01c671b, 0xbeb3e8dc) = 0
> munmap(0xb6d02000, 24576) = 0
> ioctl(3, 0xc01c671b, 0xbeb3e8dc) = 0
> munmap(0xb6d08000, 20480) = 0
> ioctl(3, 0xc01c671b, 0xbeb3e8dc) = 0
> munmap(0xb6ef3000, 4096) = 0
> ioctl(3, 0xc01c671b, 0xbeb3e8dc) = 0
> munmap(0xb6ef2000, 4096) = 0
> ioctl(3, 0xc01c671b, 0xbeb3e8dc) = 0
> munmap(0xb6d01000, 4096) = 0
> ioctl(3, 0xc01c671b, 0xbeb3e8dc) = 0
> munmap(0xb6d00000, 4096) = 0
> ioctl(3, 0xc01c671b, 0xbeb3e8dc) = 0
> munmap(0xb6cff000, 4096) = 0
> ioctl(3, 0xc01c6764, 0xbeb3e91c) = 0
> ioctl(3, 0xc01c6745, 0xbeb3e9ec) = 0
> ioctl(3, 0xc01c670d, 0xbeb3e9c4) = 0
> close(3) = 0
> exit_group(0) = ?
> +++ exited with 0 +++
> root at letux:~#
>
> root at letux:~# ls -l /dev/pvrsrvkm
> crw------- 1 root root 240, 0 Jan 1 00:06 /dev/pvrsrvkm
> root at letux:~# uname -a
> Linux letux 4.15.17-letux+ #3337 SMP PREEMPT Wed Feb 13 16:56:27 CET 2019 armv7l GNU/Linux
> root at letux:~# ./gpu-demo
> autodetected driver package: omap3630-sgx530-125
> compatible driver: omap3630_sgx530_125
> System Version String: SGX revision = 125
> ----------------- SGX CLipBlit test -----------------
> ---------------------- Start ------------------------
> Call PVRSRVConnect with a valid argument:
> OK
> Get number of devices from PVRSRVEnumerateDevices:
> OK
> .... Reported 1 devices
> .... Device Number | Device Type
> 0000 | PVRSRV_DEVICE_ID_SGX
> Attempt to acquire device 0:
> OK
> Getting SGX Client info
> OK
> .... ui32ProcessID:2691
> Display Class API: enumerate devices
> OK
> PVRSRVEnumerateDeviceClass() returns 0 display device(s)
> FAIL - PVRSRV_ERROR_NO_DC_DEVICES_FOUND(134)
> ./gpu-demo: line 71: 2691 Aborted sgx_clipblit_test
> root at letux:~#
>
Where i could find that SGX_ClipBlit test (source or binary)?
> As you can see the firmware is loaded and connected successfully. Then it just fails to enumerate
> a display which is the missing/unfixed omaplfb.
>
> Some newer kernels did fail with
>
> rt_sigaction(SIGRTMIN, {0xb6e07d9d, [], SA_RESTORER|SA_SIGINFO, 0xb6e91b01}, NULL, 8) = 0
> rt_sigaction(SIGRT_1, {0xb6e07cbd, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0xb6e91b01}, NULL, 8) = 0
> rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
> getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0
> brk(0) = 0x12000
> brk(0x33000) = 0x33000
> open("/dev/pvrsrvkm", O_RDWR) = -1 ENOMEM (Cannot allocate memory)
> write(2, "pvrsrvctl: SrvInit failed (alrea"..., 57pvrsrvctl: SrvInit failed (already initialized?) (err=4)
> ) = 57
> exit_group(1) = ?
> +++ exited with 1 +++
>
> So I have to check what did break in between. And when. Most likely something with memory allocation.
For mainline You will probably need
https://github.com/PabloPL/linux/commit/de0f7e299d94f5dfdcf15375ec2d3ace54ac4a24
because powervr is using some strange pointers.
I'm building my kernel and will get strace output of pvrsrvinit on my
device (where it's working) in few minutes.
For me it fails when trying to use egl programs (egl configurations =
0). Of course on mainline (5.0-rc4).
>
> Hope this helps!
>
> BR,
> Nikolaus
>
More information about the Letux-kernel
mailing list