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:
parent
ab4f75eb1c
commit
eec3f6dfed
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user