Subject: /dev/vga and /dev/mem XFree problems with UVM
To: None <current-users@NetBSD.ORG, tech-kern@NetBSD.ORG, port-i386@NetBSD.ORG>
From: Thor Lancelot Simon <tls@panix.com>
List: tech-kern
Date: 02/09/1998 15:19:17
I'm having some trouble using XFree with UVM.
One one machine, with an S3 764, XFree complains that it can't mmap /dev/vga
and exits. I can in fact mmap /dev/vga with a test program, so I assume it's
the mapped range that XFree's unhappy about. Rebuilding with INSECURE so
XFree can use a linear mapping for the framebuffer works.
On another machine with an S3 ViRGE/DX, the problem is worse. This XFree
server (the ViRGE support in the SVGA server, actually) can't use /dev/vga,
so I was already running with INSECURE. X finds the card at
0xf8000000, reads out the chipset's configuration, and tries to map the
framebuffer, which fails:
(--) SVGA: Detected S3 ViRGE/DXGX
(--) SVGA: using driver for chipset "s3_virge"
(**) SVGA: videoram: 4096k
(--) SVGA: Ramdac speed: 170 MHz (135 MHz for 24 bpp)
(--) SVGA: Detected current MCLK value of 47.131 MHz
(--) SVGA: Using Memory Clock value of 55.000 MHz
Fatal server error:
xf86MapVidMem: Address 0xf9000000 outside allowable range
The card has 4MB of memory, so 0xf9000000 should in fact be in the frame
buffer.
I've ktraced the X server; a call to mmap() is in fact failing. However,
the arguments to the preceding open() look a bit odd, too; is UVM picker
about the mode /dev/mem's opened with? But then why EINVAL instead of EPERM?
284 XF86_SVGA RET write 57/0x39
284 XF86_SVGA CALL write(0x2,0xefbfd388,0x22)
284 XF86_SVGA GIO fd 2 wrote 34 bytes
"(--) SVGA: Detected S3 ViRGE/DXGX
"
284 XF86_SVGA RET write 34/0x22
284 XF86_SVGA CALL write(0x2,0xefbfd374,0x2f)
284 XF86_SVGA GIO fd 2 wrote 47 bytes
"(--) SVGA: using driver for chipset "s3_virge"
"
284 XF86_SVGA RET write 47/0x2f
284 XF86_SVGA CALL sysarch(0x2,0xefbfdaa8)
284 XF86_SVGA RET sysarch 0
284 XF86_SVGA CALL write(0x2,0xefbfd390,0x1c)
284 XF86_SVGA GIO fd 2 wrote 28 bytes
"(**) SVGA: videoram: 4096k
"
284 XF86_SVGA RET write 28/0x1c
284 XF86_SVGA CALL nanosleep(0xefbfdae8,0)
284 XF86_SVGA RET nanosleep 0
284 XF86_SVGA CALL open(0xae010,0,0x3d5)
284 XF86_SVGA NAMI "/dev/mem"
284 XF86_SVGA RET open 4
284 XF86_SVGA CALL lseek(0x4,0,0xc0000,0,0)
284 XF86_SVGA RET lseek 786432/0xc0000
284 XF86_SVGA CALL read(0x4,0x26376c,0x400)
284 XF86_SVGA GIO fd 4 read 1024 bytes
"U\M-*@\M-k\^D7400\M-:\M-D\^C\M-8\b\^F\M-o\M-8 \0\M-o\M-i\^S\^[\0D\^A\
\M-U]\M-Y]IBM VGA COMPATIBLE BIOS. \0\M-;f$\^A\M-x\^A\0\0003S\^A\M^JMD\
=AM\^A\^AS3 86C375/86C385 Video BIOS. Version 2.01.11\r
Copyright 1996 S3 Incorporated.\r
\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\00007/02/9708/08/97\^B\^A\^Q\0\0\0\0\
\0 \^B\M^@\M-P \^D\^U\^U\^B\^P\0\M^@\M-~\b\^D\^D\0\0\^D\^D\0\
\0\^P \0\0\0\0\0`\0NF^F\M^HF\0\0\0\0\0\0\0\0\0\0\^Pa\M^?\^?\M-lF\0\0\\\
\^A\0\0\^E\^A:\^A\^D\M^P \^Z8H9\M-%1\^E2@3\0004\0005\0:\^E<\^P@\
\0B\0C\0E\0Q\0S\0T0U\0X\^C]\0^\0`\^Oe\0f\0g\0i\0j\0\^D\b\^F\v\0\^T\0\
\^X@\M^PPCIR3S\^A\M^J\0\0\^X\0\0\^C\0\0@\0\0\0\0\M^@\0\0\^Z\M-{\^B\^C\
\0\0\^BD\^F\^Y;\^C3\0\0\^B;\^FT{\^C\^F\^A\0\^N
\aD{\^C\^F\^A0\^N\^A\a4{\^C\^F\^AP\^N\^A\a${\^C\^F\^A\M-P\^N
\aU\M-;\^C6\^A\0\^N\M-G\aE\M-;\^C6\^A0\^N\M-P\a5\M-;\^C6\^AP\^N\M-P\a%\
\M-;\^C6\^A\M-P\^N\M-G\aV\M-{\^C\^F\^A\0\^N\M-Y\aF\M-{\^C\^F\^A0\^N\
\M-b\a6\M-{\^C\^F\^AP\^N\M-b\a&\M-{\^C\^F\^A\M-P\^N\M-Y\aW;\^D6\^A\0\
\^N<\bG;\^D6\^A0\^NE\b7;\^D6\^AP\^NE\b';\^D6\^A\M-P\^N<\bX{\^D6\^A\0\
\^NM\^FH{\^D6\^A0\^NV\^F8{\^D6\^AP\^NV\^F({\^D6\^A\M-P\^NM\^FY\M-;\^D6\
\^A\0\^Nz\^FI\M-;\^D6\^A0\^N.\a9\M-;\^D6\^AP\^N.\ay\M-;\^D6\^A\0\^N3\b\
)\M-;\^D6\^A\M-P\^Nz\^Fj\M-{\^D\^B\0\0\^F\M-'\^FZ\M-{\^D\^F\^A\0\^N\
\M-'\^FJ\M-{\^D\^F\^A0\^N[\a:\M-{\^D\^F\^AP\^N[\a*\M-{\^D\^F\^A\M-P\^N\
\M-'\^Fk;\^E2\0\0\^F\M-T\^F[;\^E6\^A\0\^N\M-T\^FK;\^E6\^A0\^N\M^H\a;;\
\^E6\^AP\^N\M^H\a+;\^E6\^A\M-P\^N\M-K\^F\\\M-{\^E6\^A\0\^N*\bL\M-{\^E6\
\^A0\^N\^F\b<\M-{\^E6\^AP\^N\^F\b,\M-{\^E6\^A\M-P\^N\^O\bm{\^E2\0\0\^F\
\M-x\^F]{\^E6\^A\^P\^N\M-x\^FM{\^E6\^A0\^N\M-,\a={\^E6\^AP\^N\M-,\a^\
\M-;\^E6\^A\^P\^N\M->\a\M^?\M^D*\b\0@\^A\^C\0\^B/\M^Z\M^C\M^E\M^\\M^H\
\^Z\M-?\^_\vG\^F\a\0\0\0\0\M^T\M^N\M^AB\^_\M^G\M-:\M-#\M^?\0\^A\^B\^C\
\^D\^E\^T\a89:;<=>?\f\0\^O\0\0\0\0\0\0\M^P\^N\0\M^?\M^D\^X\^P\0 \^A\^C\
\0\^B/\M^Z\M^C\M^D\M^\\M^H\^Z\M-?\^_\0O\r\^N\0\0\0\0\M^\\M^N\M^OB\^_\
\M^V\M-9\M-#\M^?\0\^A\^B\^C\^D\^E\^T\a89:;<=>?\f\0\^O\0\0\0\0\0\0\M^P\
\^N\0\M^?(\^X\^P\0\^P\^A\^O\0\^N/_OQ\M^BR\M^_\M-?\^_\0A\0\0\0\0\M^?\0\
\M^\\M^N\M^OP@\M^V\M-9\M-#\M^?\0\^A\^B\^C\^D\^E\^F\a\^P\^Q\^R\^S\^T\^U\
\^V\^WA\0\^O\0\0\0\0\0\0@\^E\^O\M^?(\^]\^P\0\^P\^A\^O\0\^N//'(\^O*\M^M\
\^F>\0A\0\0\0\0\M^?\0\M-h\M^K\M-_\M^@`\M-_\^F\M-+\M^?\0\^A\^B\^C\^D\^E\
\^F\a\^P\^Q\^R\^S\^T\^U\^V\^WA\0\^O\0\0\0\0\0\0@\^E\^O\M^?2J\b\0\M-z"
284 XF86_SVGA RET read 1024/0x400
284 XF86_SVGA CALL close(0x4)
284 XF86_SVGA RET close 0
284 XF86_SVGA CALL nanosleep(0xefbfdae8,0)
284 XF86_SVGA RET nanosleep 0
284 XF86_SVGA CALL write(0x2,0xefbfd390,0x20)
284 XF86_SVGA GIO fd 2 wrote 32 bytes
"(--) SVGA: Ramdac speed: 170 MHz"
284 XF86_SVGA RET write 32/0x20
284 XF86_SVGA CALL write(0x2,0xefbfd394,0x16)
284 XF86_SVGA GIO fd 2 wrote 22 bytes
" (135 MHz for 24 bpp)"
284 XF86_SVGA RET write 22/0x16
284 XF86_SVGA CALL write(0x2,0xefbfd39c,0x1)
284 XF86_SVGA GIO fd 2 wrote 1 bytes
"
"
284 XF86_SVGA RET write 1
284 XF86_SVGA CALL write(0x2,0xefbfd38c,0x35)
284 XF86_SVGA GIO fd 2 wrote 53 bytes
"(--) SVGA: Detected current MCLK value of 47.131 MHz
"
284 XF86_SVGA RET write 53/0x35
284 XF86_SVGA CALL write(0x2,0xefbfd38c,0x32)
284 XF86_SVGA GIO fd 2 wrote 50 bytes
"(--) SVGA: Using Memory Clock value of 55.000 MHz
"
284 XF86_SVGA RET write 50/0x32
284 XF86_SVGA CALL open(0xaf26c,0x2,0xf9000000)
284 XF86_SVGA NAMI "/dev/mem"
284 XF86_SVGA RET open 4
284 XF86_SVGA CALL mmap(0,0x1000,0x3,0,0x4,0,0xa0000,0)
284 XF86_SVGA RET mmap -1 errno 22 Invalid argument
284 XF86_SVGA CALL write(0x2,0xefbfd360,0x15)
284 XF86_SVGA GIO fd 2 wrote 21 bytes
"
Fatal server error:
"
284 XF86_SVGA RET write 21/0x15
284 XF86_SVGA CALL write(0x2,0xefbfd368,0x3a)
284 XF86_SVGA GIO fd 2 wrote 58 bytes
"xf86MapVidMem: Address 0xf9000000 outside allowable range
"
I'll chase this further myself, but input from others would be useful.
--
Thor Lancelot Simon tls@rek.tjls.com
"And where do all these highways go, now that we are free?"