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