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);

Reply via email to