Commit eec3f6df authored by Ben Skeggs's avatar Ben Skeggs

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
......@@ -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);
......
......@@ -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;
......
......@@ -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
......
......@@ -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
......
......@@ -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
......
......@@ -5,7 +5,7 @@
#include <subdev/top.h>
struct nvkm_top_func {
int (*oneinit)(struct nvkm_top *);
int (*parse)(struct nvkm_top *);
};
int nvkm_top_new_(const struct nvkm_top_func *, struct nvkm_device *, enum nvkm_subdev_type, int,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment