Module Name: src Committed By: riastradh Date: Wed Mar 5 14:42:27 UTC 2014
Modified Files: src/sys/external/bsd/drm2/dist/include/drm [riastradh-drm2]: drmP.h src/sys/external/bsd/drm2/drm [riastradh-drm2]: drm_drv.c src/sys/external/bsd/drm2/i915drm [riastradh-drm2]: i915_pci.c Log Message: Handle attach failure and don't try a framebuffer in i915 on failure. To generate a diff of this commit: cvs rdiff -u -r1.1.1.1.2.57 -r1.1.1.1.2.58 \ src/sys/external/bsd/drm2/dist/include/drm/drmP.h cvs rdiff -u -r1.1.2.36 -r1.1.2.37 src/sys/external/bsd/drm2/drm/drm_drv.c cvs rdiff -u -r1.1.2.12 -r1.1.2.13 \ src/sys/external/bsd/drm2/i915drm/i915_pci.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/external/bsd/drm2/dist/include/drm/drmP.h diff -u src/sys/external/bsd/drm2/dist/include/drm/drmP.h:1.1.1.1.2.57 src/sys/external/bsd/drm2/dist/include/drm/drmP.h:1.1.1.1.2.58 --- src/sys/external/bsd/drm2/dist/include/drm/drmP.h:1.1.1.1.2.57 Tue Mar 4 20:45:16 2014 +++ src/sys/external/bsd/drm2/dist/include/drm/drmP.h Wed Mar 5 14:42:27 2014 @@ -1469,7 +1469,7 @@ extern int drm_lastclose(struct drm_devi #endif #ifdef __NetBSD__ -extern void drm_config_found(device_t, /* XXXX const */ struct drm_driver *, +extern int drm_config_found(device_t, /* XXX const */ struct drm_driver *, unsigned long, struct drm_device *); #endif Index: src/sys/external/bsd/drm2/drm/drm_drv.c diff -u src/sys/external/bsd/drm2/drm/drm_drv.c:1.1.2.36 src/sys/external/bsd/drm2/drm/drm_drv.c:1.1.2.37 --- src/sys/external/bsd/drm2/drm/drm_drv.c:1.1.2.36 Tue Mar 4 20:45:16 2014 +++ src/sys/external/bsd/drm2/drm/drm_drv.c Wed Mar 5 14:42:27 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: drm_drv.c,v 1.1.2.36 2014/03/04 20:45:16 riastradh Exp $ */ +/* $NetBSD: drm_drv.c,v 1.1.2.37 2014/03/05 14:42:27 riastradh Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: drm_drv.c,v 1.1.2.36 2014/03/04 20:45:16 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: drm_drv.c,v 1.1.2.37 2014/03/05 14:42:27 riastradh Exp $"); #include <sys/param.h> #include <sys/types.h> @@ -49,6 +49,8 @@ __KERNEL_RCSID(0, "$NetBSD: drm_drv.c,v #include <uvm/uvm_extern.h> +#include <prop/proplib.h> + #include <drm/drmP.h> #include "ioconf.h" @@ -327,6 +329,7 @@ drm_attach(device_t parent, device_t sel if (device_unit(self) >= 64) { /* XXX Need to do something here! */ aprint_error_dev(self, "can't handle >=64 drm devices!"); + error = ENFILE; /* XXX */ goto fail0; } @@ -373,8 +376,11 @@ drm_attach(device_t parent, device_t sel /* XXX errno Linux->NetBSD */ error = -drm_mode_group_init_legacy_group(dev, &dev->primary->mode_group); - if (error) + if (error) { + aprint_error_dev(parent, "unable to init legacy group" + ": %d\n", error); goto fail2; + } } /* Success! */ @@ -384,7 +390,8 @@ drm_attach(device_t parent, device_t sel fail2: if (dev->driver->unload != NULL) (*dev->driver->unload)(dev); fail1: drm_undo_fill_in_dev(dev); -fail0: return; +fail0: prop_dictionary_set_int64(device_properties(self), "error", + (int64_t)error); } static int @@ -893,22 +900,33 @@ out: return error; } -void +int drm_config_found(device_t parent, struct drm_driver *driver, unsigned long flags, struct drm_device *dev) { static const struct drm_attach_args zero_daa; struct drm_attach_args daa = zero_daa; + device_t child; + int64_t error64; + int error = 0; daa.daa_drm_dev = dev; daa.daa_driver = driver; daa.daa_flags = flags; dev->driver = driver; - if (config_found_ia(parent, "drmkmsbus", &daa, NULL) == NULL) { - aprint_error_dev(parent, "unable to attach drm\n"); - return; + + child = config_found_ia(parent, "drmkmsbus", &daa, NULL); + if (child == NULL) { + aprint_error_dev(parent, "no drm pseudo-device found\n"); + return ENOENT; } + + if (prop_dictionary_get_int64(device_properties(child), "error", + &error64)) + error = (int)error64; + + return error; } struct drm_local_map * Index: src/sys/external/bsd/drm2/i915drm/i915_pci.c diff -u src/sys/external/bsd/drm2/i915drm/i915_pci.c:1.1.2.12 src/sys/external/bsd/drm2/i915drm/i915_pci.c:1.1.2.13 --- src/sys/external/bsd/drm2/i915drm/i915_pci.c:1.1.2.12 Wed Jan 29 19:48:14 2014 +++ src/sys/external/bsd/drm2/i915drm/i915_pci.c Wed Mar 5 14:42:27 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: i915_pci.c,v 1.1.2.12 2014/01/29 19:48:14 riastradh Exp $ */ +/* $NetBSD: i915_pci.c,v 1.1.2.13 2014/03/05 14:42:27 riastradh Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: i915_pci.c,v 1.1.2.12 2014/01/29 19:48:14 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: i915_pci.c,v 1.1.2.13 2014/03/05 14:42:27 riastradh Exp $"); #include <sys/types.h> #ifndef _MODULE @@ -153,6 +153,7 @@ i915drm_attach(device_t parent, device_t const struct intel_device_info *const info = i915drm_pci_lookup(pa); const unsigned long flags = (unsigned long)(uintptr_t)(const void *)info; + int error; KASSERT(info != NULL); @@ -171,7 +172,12 @@ i915drm_attach(device_t parent, device_t drm_pci_attach(self, pa, &sc->sc_pci_dev, &sc->sc_drm_dev); /* Attach the drm driver. */ - drm_config_found(self, i915_drm_driver, flags, &sc->sc_drm_dev); + error = drm_config_found(self, i915_drm_driver, flags, + &sc->sc_drm_dev); + if (error) { + aprint_error_dev(self, "unable to attach drm: %d\n", error); + return; + } /* Attach a framebuffer, but not until interrupts work. */ config_interrupts(self, &i915drm_attach_framebuffer);