Commit eec3f6df authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/top: parse device topology right after devinit



We're going to want this information available earlier than it is now.

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
parent ab4f75eb
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ struct nvkm_top_device {
	struct list_head head;
};

int nvkm_top_parse(struct nvkm_device *);
u32 nvkm_top_addr(struct nvkm_device *, enum nvkm_subdev_type, int);
u32 nvkm_top_reset(struct nvkm_device *, enum nvkm_subdev_type, int);
u32 nvkm_top_intr_mask(struct nvkm_device *, enum nvkm_subdev_type, int);
+4 −0
Original line number Diff line number Diff line
@@ -2775,6 +2775,10 @@ nvkm_device_preinit(struct nvkm_device *device)
	if (ret)
		goto fail;

	ret = nvkm_top_parse(device);
	if (ret)
		goto fail;

	time = ktime_to_us(ktime_get()) - time;
	nvdev_trace(device, "preinit completed in %lldus\n", time);
	return 0;
+8 −5
Original line number Diff line number Diff line
@@ -117,11 +117,15 @@ nvkm_top_fault(struct nvkm_device *device, int fault)
	return NULL;
}

static int
nvkm_top_oneinit(struct nvkm_subdev *subdev)
int
nvkm_top_parse(struct nvkm_device *device)
{
	struct nvkm_top *top = nvkm_top(subdev);
	return top->func->oneinit(top);
	struct nvkm_top *top = device->top;

	if (!top || !list_empty(&top->device))
		return 0;

	return top->func->parse(top);
}

static void *
@@ -141,7 +145,6 @@ nvkm_top_dtor(struct nvkm_subdev *subdev)
static const struct nvkm_subdev_func
nvkm_top = {
	.dtor = nvkm_top_dtor,
	.oneinit = nvkm_top_oneinit,
};

int
+2 −2
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@
#include "priv.h"

static int
ga100_top_oneinit(struct nvkm_top *top)
ga100_top_parse(struct nvkm_top *top)
{
	struct nvkm_subdev *subdev = &top->subdev;
	struct nvkm_device *device = subdev->device;
@@ -97,7 +97,7 @@ ga100_top_oneinit(struct nvkm_top *top)

static const struct nvkm_top_func
ga100_top = {
	.oneinit = ga100_top_oneinit,
	.parse = ga100_top_parse,
};

int
+2 −2
Original line number Diff line number Diff line
@@ -24,7 +24,7 @@
#include "priv.h"

static int
gk104_top_oneinit(struct nvkm_top *top)
gk104_top_parse(struct nvkm_top *top)
{
	struct nvkm_subdev *subdev = &top->subdev;
	struct nvkm_device *device = subdev->device;
@@ -108,7 +108,7 @@ gk104_top_oneinit(struct nvkm_top *top)

static const struct nvkm_top_func
gk104_top = {
	.oneinit = gk104_top_oneinit,
	.parse = gk104_top_parse,
};

int
Loading