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: Ben Skeggs <bskeggs@redhat.com>
Reviewed-by: Lyude Paul <lyude@redhat.com>
This commit is contained in:
Ben Skeggs 2022-06-01 20:46:51 +10:00
parent ab4f75eb1c
commit eec3f6dfed
6 changed files with 18 additions and 10 deletions

View File

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

View File

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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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,