Hello all
So recently I got my hands on a GX+ (501-2039) and when I tried it out
on netbsd I noticed that it only detected 1M or vram instead of the 4M
the card has. Looking through the source code I found this.
src/sys/dev/sbus/cgsix_sbus.c: line 175
sc->sc_ramsize = prom_getpropint(node, "fbmapped", 1024 * 1024);
However when I looked at the attributes of the GX+ I saw it didn't
even define an fbmapped at all, but it does have a vmsize = 4. Then I
checked a GX (501-1996) and it also does not have fbmapped but it does
have vmsize = 1. Finally I check a TGX+ clone w/ 2M of vram and it
does have fbmapped = 2M and it also has vmsize = 2. Based on this
limited sample size I believe the fbmapped attribute was added in the
TGX line. Attached below is a patch to check both attributes which
correctly detects the memory size on the cards I have.
After that I ran into a second problem in that the xserver would only
map 2M of ram. Looking at the code I found the xdriver doesn't detect
the memory size at all it just blindly tries to map memory til it
succeeds. I wasn't sure how to add memory detection to the driver so I
just raised the max amount it would try to 4M, patch below.
With these changes my GX+ is now properly detected as shown here.
[ 1.000003] cgsix0 at sbus0 slot 1 offset 0x0 level 9:
SUNW,501-1717, 1152 x 900, rev 7
[ 1.000003] cgsix0: attached to /dev/fb0
[ 1.000003] cgsix0: framebuffer size: 4 MB
[ 305.720] (II) SUNCG6(0): mapped 4096 KB video RAM
...
[ 305.916] (II) EXA(0): Offscreen pixmap area of 3156480 bytes
Due to the extra ram the GX+ also gives a modest performance increase
over the GX.
ss10 - sm61 x11perf -comppixwin
GX 4510/s 613/s 31/s
GX+ 5190/s 1870/s 123/s
Hope this helps.
Attachment:
cgsix_sbus.diff
Description: Binary data
Attachment:
cg6_xdriver.diff
Description: Binary data