Index: sys/external/bsd/drm2/radeon/files.radeon =================================================================== RCS file: /cvsroot/src/sys/external/bsd/drm2/radeon/files.radeon,v retrieving revision 1.12 diff -p -u -r1.12 files.radeon --- sys/external/bsd/drm2/radeon/files.radeon 2 Oct 2014 12:25:14 -0000 1.12 +++ sys/external/bsd/drm2/radeon/files.radeon 6 May 2015 20:01:19 -0000 @@ -4,6 +4,9 @@ define radeonfbbus { } device radeon: drmkms, drmkms_pci, drmkms_ttm, radeonfbbus, firmload attach radeon at pci +define radeonvgabus { } +attach vga at radeonvgabus with vga_radeon + # XXX Rename this to radeonfb when the legacy radeonfb(4) is gone. device radeondrmkmsfb: radeonfbbus, genfb, wsemuldisplaydev attach radeondrmkmsfb at radeonfbbus Index: sys/external/bsd/drm2/radeon/radeon_pci.c =================================================================== RCS file: /cvsroot/src/sys/external/bsd/drm2/radeon/radeon_pci.c,v retrieving revision 1.9 diff -p -u -r1.9 radeon_pci.c --- sys/external/bsd/drm2/radeon/radeon_pci.c 19 Apr 2015 01:08:56 -0000 1.9 +++ sys/external/bsd/drm2/radeon/radeon_pci.c 6 May 2015 20:01:19 -0000 @@ -67,6 +67,8 @@ __KERNEL_RCSID(0, "$NetBSD: radeon_pci.c #include "radeon_drv.h" #include "radeon_task.h" +#include "locators.h" + SIMPLEQ_HEAD(radeon_task_head, radeon_task); struct radeon_softc { @@ -195,6 +197,20 @@ radeon_attach(device_t parent, device_t config_mountroot(self, &radeon_attach_real); } +__strong_alias(vga_radeon_ca,vga_pci_ca); + +static void +radeon_fallback(struct radeon_softc *sc) +{ + const int locs[PCICF_NLOCS] = { + [PCICF_DEV] = sc->sc_pa.pa_device, + [PCICF_FUNCTION] = sc->sc_pa.pa_function, + }; + + (void)config_found_sm_loc(sc->sc_dev, "radeonvgabus", locs, &sc->sc_pa, + NULL, NULL); +} + static void radeon_attach_real(device_t self) { @@ -224,7 +240,7 @@ radeon_attach_real(device_t self) flags, &sc->sc_drm_dev); if (error) { aprint_error_dev(self, "unable to attach drm: %d\n", error); - goto out; + goto fail; } while (!SIMPLEQ_EMPTY(&sc->sc_task_u.attach)) { @@ -242,10 +258,15 @@ radeon_attach_real(device_t self) aprint_error_dev(self, "unable to create workqueue: %d\n", error); sc->sc_task_u.workqueue = NULL; - goto out; + goto fail; } -out: sc->sc_dev = self; + /* Success! */ + sc->sc_dev = self; + return; + +fail: sc->sc_dev = self; + radeon_fallback(sc); } static int