Module Name: src
Committed By: jmcneill
Date: Sun Oct 18 14:20:22 UTC 2015
Modified Files:
src/sys/arch/arm/nvidia: tegra_nouveau.c
Log Message:
defer DRM initialization until after the root file-system is loaded, so we can
read necessary firmware files
To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/nvidia/tegra_nouveau.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/arch/arm/nvidia/tegra_nouveau.c
diff -u src/sys/arch/arm/nvidia/tegra_nouveau.c:1.3 src/sys/arch/arm/nvidia/tegra_nouveau.c:1.4
--- src/sys/arch/arm/nvidia/tegra_nouveau.c:1.3 Sun Oct 18 14:04:32 2015
+++ src/sys/arch/arm/nvidia/tegra_nouveau.c Sun Oct 18 14:20:22 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: tegra_nouveau.c,v 1.3 2015/10/18 14:04:32 jmcneill Exp $ */
+/* $NetBSD: tegra_nouveau.c,v 1.4 2015/10/18 14:20:22 jmcneill Exp $ */
/*-
* Copyright (c) 2015 Jared D. McNeill <[email protected]>
@@ -29,7 +29,7 @@
#include "locators.h"
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tegra_nouveau.c,v 1.3 2015/10/18 14:04:32 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tegra_nouveau.c,v 1.4 2015/10/18 14:20:22 jmcneill Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -60,7 +60,7 @@ struct tegra_nouveau_softc {
struct nouveau_device *sc_nv_dev;
};
-static int tegra_nouveau_init(struct tegra_nouveau_softc *);
+static void tegra_nouveau_init(device_t);
static int tegra_nouveau_get_irq(struct drm_device *);
static const char *tegra_nouveau_get_name(struct drm_device *);
@@ -118,16 +118,13 @@ tegra_nouveau_attach(device_t parent, de
return;
}
- error = tegra_nouveau_init(sc);
- if (error) {
- aprint_error_dev(self, "couldn't attach drm: %d\n", error);
- return;
- }
+ config_mountroot(self, tegra_nouveau_init);
}
-static int
-tegra_nouveau_init(struct tegra_nouveau_softc *sc)
+static void
+tegra_nouveau_init(device_t self)
{
+ struct tegra_nouveau_softc * const sc = device_private(self);
struct drm_driver * const driver = nouveau_drm_driver;
struct drm_device *dev;
bus_space_tag_t bst = &armv7_generic_bs_tag;
@@ -137,8 +134,10 @@ tegra_nouveau_init(struct tegra_nouveau_
driver->bus = &drm_tegra_nouveau_bus;
dev = drm_dev_alloc(driver, sc->sc_dev);
- if (dev == NULL)
- return ENOMEM;
+ if (dev == NULL) {
+ aprint_error_dev(self, "couldn't allocate DRM device\n");
+ return;
+ }
dev->platformdev = &sc->sc_platform_dev;
dev->platformdev->id = -1;
@@ -156,14 +155,14 @@ tegra_nouveau_init(struct tegra_nouveau_
error = -drm_dev_register(dev, 0);
if (error) {
drm_dev_unref(dev);
- return error;
+ aprint_error_dev(self, "couldn't register DRM device: %d\n",
+ error);
+ return;
}
- device_printf(sc->sc_dev, "initialized %s %d.%d.%d %s on minor %d\n",
+ aprint_normal_dev(self, "initialized %s %d.%d.%d %s on minor %d\n",
driver->name, driver->major, driver->minor, driver->patchlevel,
driver->date, dev->primary->index);
-
- return 0;
}
static int