Turns out we are pretty close. The only problem is that X still wants to probe the pci bus. We allow access to /dev/pci0 if machdep.allowaperture is 0, but libpciaccess uses O_RDWR to open it. The diff below chages this such that it tries O_RDONLY if O_RDWR fails.
Works fine with inteldrm(4), although Xorg will still print a warning telling you to set machdep.allowaperture to 1: [257036.053] (WW) checkDevMem: failed to open /dev/xf86 and /dev/mem (Operation not permitted) Check that you have set 'machdep.allowaperture=1' in /etc/sysctl.conf and reboot your machine refer to xf86(4) for details Haven't tried radeondrm(4) yet. ok? Index: openbsd_pci.c =================================================================== RCS file: /cvs/xenocara/lib/libpciaccess/src/openbsd_pci.c,v retrieving revision 1.18 diff -u -p -r1.18 openbsd_pci.c --- openbsd_pci.c 13 Aug 2013 17:24:03 -0000 1.18 +++ openbsd_pci.c 13 Feb 2014 21:42:08 -0000 @@ -599,8 +599,11 @@ pci_system_openbsd_create(void) for (domain = 0; domain < sizeof(pcifd) / sizeof(pcifd[0]); domain++) { snprintf(path, sizeof(path), "/dev/pci%d", domain); pcifd[domain] = open(path, O_RDWR | O_CLOEXEC); - if (pcifd[domain] == -1) - break; + if (pcifd[domain] == -1) { + pcifd[domain] = open(path, O_RDONLY | O_CLOEXEC); + if (pcifd[domain] == -1) + break; + } ndomains++; }