FreeBSD 12 Xorg vs X11SSH-F / AST

O'Connor, Daniel darius at dons.net.au
Sun Sep 1 07:01:00 UTC 2019



> On 27 Aug 2019, at 18:10, O'Connor, Daniel <darius at dons.net.au> wrote:
> 
>> On 27 Aug 2019, at 13:45, O'Connor, Daniel <darius at dons.net.au> wrote:
>> 
>> Although I could set uncacheable (no difference).
>> 
>> Next stop will be obscure BIOS settings I suppose.
> 
> I couldn't find anything useful there.
> 
> I realised that my scfb failure was because I am booting BIOS rather than UEFI but I will have to reinstall before I can fix that.

I reinstalled with UEFI and scfb works now (not sure if it's any faster yet). It didn't fix ast though.

I rebuilt the AST driver with debugging and found it was stuck at..
0x0000000801ae1d86 in ASTGetDRAMInfo (pScrn=0x801af7000) at ast_vgatool.c:439
439	    } while (*(volatile ULONG *) (pAST->MMIOVirtualAddr + 0x10000) != 0x01);

(gdb) print/x *(volatile ULONG *) (pAST->MMIOVirtualAddr + 0x10000)
$2 = 0xffffffff

Reading around this area also reads 0xffffffff all the time.

If I comment that out X runs but the AST driver then rejects every mode line, eg
[ 48784.246] (II) AST(0): Not using driver mode "1920x1080" (bad mode clock/interlace/doublescan)

I checked the code against what is working in FreeBSD 11 and it is identical. That does use an older Xorg server though so I am not sure if it is FreeBSD 12 (compiler or kernel or..) or an Xorg change that has broken things.

I modified the driver on the working system to dump the values that ASTGetDRAMInfo extracts and hard coded them and it works(!) on the FreeBSD 12 system. Obviously while this works for me it's not a long term solution :)

I added some debugging to the mapping process in ASTMapMMIO:
[ 71021.555] (II) AST(0): pci_device_map_range Addr 0xdf000000 size 0x20000, err 0 result 0x01b30000

But when I check ASTGetDRAMInfo()..
(gdb) print/x pAST->MMIOVirtualAddr
$2 = 0x801b30000

(gdb) print/x *(0x01b30000)
Cannot access memory at address 0x1b30000

The mappings look to match dmesg:
vgapci0: <VGA-compatible display> port 0xc000-0xc07f mem 0xde000000-0xdeffffff,0xdf000000-0xdf01ffff irq 18 at device 0.0 on pci4

Curiously on the working machine with an identical motherboard it is at a different location:
vgapci0: <VGA-compatible display> port 0xd000-0xd07f mem 0xf6000000-0xf6ffffff,0xf7000000-0xf701ffff irq 16 at device 0.0 on pci4

Any suggestions welcome :)

--
Daniel O'Connor
"The nice thing about standards is that there
are so many of them to choose from."
 -- Andrew Tanenbaum




More information about the freebsd-stable mailing list