diff -ur dev/drm.orig/drm_drv.c dev/drm/drm_drv.c --- dev/drm.orig/drm_drv.c Wed Nov 30 16:22:19 2005 +++ dev/drm/drm_drv.c Fri Dec 2 11:16:08 2005 @@ -149,9 +149,15 @@ { drm_pci_id_list_t *id_entry; int vendor, device; + device_t realdev; - vendor = pci_get_vendor(dev); - device = pci_get_device(dev); + if (!strcmp(device_get_name(dev), "drmsub")) + realdev = device_get_parent(dev); + else + realdev = dev; + + vendor = pci_get_vendor(realdev); + device = pci_get_device(realdev); id_entry = drm_find_description(vendor, device, idlist); if (id_entry != NULL) { @@ -167,14 +173,16 @@ drm_device_t *dev; drm_pci_id_list_t *id_entry; int unit; + int subdevice = 0; + device_t parentdev; unit = device_get_unit(nbdev); dev = device_get_softc(nbdev); + parentdev = device_get_parent(nbdev); if (!strcmp(device_get_name(nbdev), "drmsub")) - dev->device = device_get_parent(nbdev); - else - dev->device = nbdev; + subdevice = 1; + dev->device = subdevice ? parentdev : nbdev; dev->devnode = make_dev(&drm_cdevsw, unit, @@ -186,8 +194,9 @@ mtx_init(&dev->dev_lock, "drm device", NULL, MTX_DEF); #endif - id_entry = drm_find_description(pci_get_vendor(nbdev), - pci_get_device(nbdev), idlist); + id_entry = drm_find_description( + pci_get_vendor(subdevice ? parentdev : nbdev), + pci_get_device(subdevice ? parentdev : nbdev), idlist); dev->id_entry = id_entry; return drm_load(dev); @@ -519,8 +528,9 @@ } if (dev->driver.use_agp) { - if (drm_device_is_agp(dev)) - dev->agp = drm_agp_init(); + if (drm_device_is_agp(dev) || + !strcmp(device_get_name(dev->device), "agp")) + dev->agp = drm_agp_init(); if (dev->driver.require_agp && dev->agp == NULL) { DRM_ERROR("Card isn't AGP, or couldn't initialize " "AGP.\n"); diff -ur dev/drm.orig/i915_drv.c dev/drm/i915_drv.c --- dev/drm.orig/i915_drv.c Wed Nov 30 16:22:19 2005 +++ dev/drm/i915_drv.c Wed Nov 30 16:28:20 2005 @@ -104,7 +104,7 @@ }; extern devclass_t drm_devclass; -DRIVER_MODULE(i915, pci, i915_driver, drm_devclass, 0, 0); +DRIVER_MODULE(i915, agp, i915_driver, drm_devclass, 0, 0); MODULE_DEPEND(i915, drm, 1, 1, 1); #elif defined(__NetBSD__) || defined(__OpenBSD__)