Commit 6dd123ba authored by Ben Skeggs's avatar Ben Skeggs

drm/nouveau/mmu: switch to instanced constructor

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
parent 209ec1b8
...@@ -60,7 +60,6 @@ struct nvkm_device { ...@@ -60,7 +60,6 @@ struct nvkm_device {
struct notifier_block nb; struct notifier_block nb;
} acpi; } acpi;
struct nvkm_mmu *mmu;
struct nvkm_subdev *mxm; struct nvkm_subdev *mxm;
struct nvkm_pci *pci; struct nvkm_pci *pci;
struct nvkm_pmu *pmu; struct nvkm_pmu *pmu;
...@@ -131,7 +130,6 @@ struct nvkm_device_chip { ...@@ -131,7 +130,6 @@ struct nvkm_device_chip {
#include <core/layout.h> #include <core/layout.h>
#undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_INST
#undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_ONCE
int (*mmu )(struct nvkm_device *, int idx, struct nvkm_mmu **);
int (*mxm )(struct nvkm_device *, int idx, struct nvkm_subdev **); int (*mxm )(struct nvkm_device *, int idx, struct nvkm_subdev **);
int (*pci )(struct nvkm_device *, int idx, struct nvkm_pci **); int (*pci )(struct nvkm_device *, int idx, struct nvkm_pci **);
int (*pmu )(struct nvkm_device *, int idx, struct nvkm_pmu **); int (*pmu )(struct nvkm_device *, int idx, struct nvkm_pmu **);
......
...@@ -10,6 +10,7 @@ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BUS , struct nvkm_bus , bus) ...@@ -10,6 +10,7 @@ NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BUS , struct nvkm_bus , bus)
NVKM_LAYOUT_ONCE(NVKM_SUBDEV_INSTMEM , struct nvkm_instmem , imem) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_INSTMEM , struct nvkm_instmem , imem)
NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FB , struct nvkm_fb , fb) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FB , struct nvkm_fb , fb)
NVKM_LAYOUT_ONCE(NVKM_SUBDEV_LTC , struct nvkm_ltc , ltc) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_LTC , struct nvkm_ltc , ltc)
NVKM_LAYOUT_ONCE(NVKM_SUBDEV_MMU , struct nvkm_mmu , mmu)
NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BAR , struct nvkm_bar , bar) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BAR , struct nvkm_bar , bar)
NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FAULT , struct nvkm_fault , fault) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_FAULT , struct nvkm_fault , fault)
NVKM_LAYOUT_ONCE(NVKM_SUBDEV_ACR , struct nvkm_acr , acr) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_ACR , struct nvkm_acr , acr)
......
...@@ -122,19 +122,19 @@ struct nvkm_mmu { ...@@ -122,19 +122,19 @@ struct nvkm_mmu {
struct nvkm_device_oclass user; struct nvkm_device_oclass user;
}; };
int nv04_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); int nv04_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **);
int nv41_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); int nv41_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **);
int nv44_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); int nv44_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **);
int nv50_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); int nv50_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **);
int g84_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); int g84_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **);
int mcp77_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); int mcp77_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **);
int gf100_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); int gf100_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **);
int gk104_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); int gk104_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **);
int gk20a_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); int gk20a_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **);
int gm200_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); int gm200_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **);
int gm20b_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); int gm20b_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **);
int gp100_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); int gp100_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **);
int gp10b_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); int gp10b_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **);
int gv100_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); int gv100_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **);
int tu102_mmu_new(struct nvkm_device *, int, struct nvkm_mmu **); int tu102_mmu_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_mmu **);
#endif #endif
...@@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = { ...@@ -33,7 +33,6 @@ nvkm_subdev_type[NVKM_SUBDEV_NR] = {
#include <core/layout.h> #include <core/layout.h>
#undef NVKM_LAYOUT_ONCE #undef NVKM_LAYOUT_ONCE
#undef NVKM_LAYOUT_INST #undef NVKM_LAYOUT_INST
[NVKM_SUBDEV_MMU ] = "mmu",
[NVKM_SUBDEV_MXM ] = "mxm", [NVKM_SUBDEV_MXM ] = "mxm",
[NVKM_SUBDEV_PCI ] = "pci", [NVKM_SUBDEV_PCI ] = "pci",
[NVKM_SUBDEV_PMU ] = "pmu", [NVKM_SUBDEV_PMU ] = "pmu",
......
...@@ -415,9 +415,9 @@ nvkm_mmu = { ...@@ -415,9 +415,9 @@ nvkm_mmu = {
void void
nvkm_mmu_ctor(const struct nvkm_mmu_func *func, struct nvkm_device *device, nvkm_mmu_ctor(const struct nvkm_mmu_func *func, struct nvkm_device *device,
int index, struct nvkm_mmu *mmu) enum nvkm_subdev_type type, int inst, struct nvkm_mmu *mmu)
{ {
nvkm_subdev_ctor(&nvkm_mmu, device, index, &mmu->subdev); nvkm_subdev_ctor(&nvkm_mmu, device, type, inst, &mmu->subdev);
mmu->func = func; mmu->func = func;
mmu->dma_bits = func->dma_bits; mmu->dma_bits = func->dma_bits;
nvkm_mmu_ptc_init(mmu); nvkm_mmu_ptc_init(mmu);
...@@ -428,10 +428,10 @@ nvkm_mmu_ctor(const struct nvkm_mmu_func *func, struct nvkm_device *device, ...@@ -428,10 +428,10 @@ nvkm_mmu_ctor(const struct nvkm_mmu_func *func, struct nvkm_device *device,
int int
nvkm_mmu_new_(const struct nvkm_mmu_func *func, struct nvkm_device *device, nvkm_mmu_new_(const struct nvkm_mmu_func *func, struct nvkm_device *device,
int index, struct nvkm_mmu **pmmu) enum nvkm_subdev_type type, int inst, struct nvkm_mmu **pmmu)
{ {
if (!(*pmmu = kzalloc(sizeof(**pmmu), GFP_KERNEL))) if (!(*pmmu = kzalloc(sizeof(**pmmu), GFP_KERNEL)))
return -ENOMEM; return -ENOMEM;
nvkm_mmu_ctor(func, device, index, *pmmu); nvkm_mmu_ctor(func, device, type, inst, *pmmu);
return 0; return 0;
} }
...@@ -35,7 +35,8 @@ g84_mmu = { ...@@ -35,7 +35,8 @@ g84_mmu = {
}; };
int int
g84_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) g84_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
struct nvkm_mmu **pmmu)
{ {
return nvkm_mmu_new_(&g84_mmu, device, index, pmmu); return nvkm_mmu_new_(&g84_mmu, device, type, inst, pmmu);
} }
...@@ -84,7 +84,8 @@ gf100_mmu = { ...@@ -84,7 +84,8 @@ gf100_mmu = {
}; };
int int
gf100_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) gf100_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
struct nvkm_mmu **pmmu)
{ {
return nvkm_mmu_new_(&gf100_mmu, device, index, pmmu); return nvkm_mmu_new_(&gf100_mmu, device, type, inst, pmmu);
} }
...@@ -35,7 +35,8 @@ gk104_mmu = { ...@@ -35,7 +35,8 @@ gk104_mmu = {
}; };
int int
gk104_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) gk104_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
struct nvkm_mmu **pmmu)
{ {
return nvkm_mmu_new_(&gk104_mmu, device, index, pmmu); return nvkm_mmu_new_(&gk104_mmu, device, type, inst, pmmu);
} }
...@@ -35,7 +35,8 @@ gk20a_mmu = { ...@@ -35,7 +35,8 @@ gk20a_mmu = {
}; };
int int
gk20a_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) gk20a_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
struct nvkm_mmu **pmmu)
{ {
return nvkm_mmu_new_(&gk20a_mmu, device, index, pmmu); return nvkm_mmu_new_(&gk20a_mmu, device, type, inst, pmmu);
} }
...@@ -90,9 +90,10 @@ gm200_mmu_fixed = { ...@@ -90,9 +90,10 @@ gm200_mmu_fixed = {
}; };
int int
gm200_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) gm200_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
struct nvkm_mmu **pmmu)
{ {
if (device->fb->page) if (device->fb->page)
return nvkm_mmu_new_(&gm200_mmu_fixed, device, index, pmmu); return nvkm_mmu_new_(&gm200_mmu_fixed, device, type, inst, pmmu);
return nvkm_mmu_new_(&gm200_mmu, device, index, pmmu); return nvkm_mmu_new_(&gm200_mmu, device, type, inst, pmmu);
} }
...@@ -47,9 +47,10 @@ gm20b_mmu_fixed = { ...@@ -47,9 +47,10 @@ gm20b_mmu_fixed = {
}; };
int int
gm20b_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) gm20b_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
struct nvkm_mmu **pmmu)
{ {
if (device->fb->page) if (device->fb->page)
return nvkm_mmu_new_(&gm20b_mmu_fixed, device, index, pmmu); return nvkm_mmu_new_(&gm20b_mmu_fixed, device, type, inst, pmmu);
return nvkm_mmu_new_(&gm20b_mmu, device, index, pmmu); return nvkm_mmu_new_(&gm20b_mmu, device, type, inst, pmmu);
} }
...@@ -37,9 +37,10 @@ gp100_mmu = { ...@@ -37,9 +37,10 @@ gp100_mmu = {
}; };
int int
gp100_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) gp100_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
struct nvkm_mmu **pmmu)
{ {
if (!nvkm_boolopt(device->cfgopt, "GP100MmuLayout", true)) if (!nvkm_boolopt(device->cfgopt, "GP100MmuLayout", true))
return gm200_mmu_new(device, index, pmmu); return gm200_mmu_new(device, type, inst, pmmu);
return nvkm_mmu_new_(&gp100_mmu, device, index, pmmu); return nvkm_mmu_new_(&gp100_mmu, device, type, inst, pmmu);
} }
...@@ -37,9 +37,10 @@ gp10b_mmu = { ...@@ -37,9 +37,10 @@ gp10b_mmu = {
}; };
int int
gp10b_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) gp10b_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
struct nvkm_mmu **pmmu)
{ {
if (!nvkm_boolopt(device->cfgopt, "GP100MmuLayout", true)) if (!nvkm_boolopt(device->cfgopt, "GP100MmuLayout", true))
return gm20b_mmu_new(device, index, pmmu); return gm20b_mmu_new(device, type, inst, pmmu);
return nvkm_mmu_new_(&gp10b_mmu, device, index, pmmu); return nvkm_mmu_new_(&gp10b_mmu, device, type, inst, pmmu);
} }
...@@ -37,7 +37,8 @@ gv100_mmu = { ...@@ -37,7 +37,8 @@ gv100_mmu = {
}; };
int int
gv100_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) gv100_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
struct nvkm_mmu **pmmu)
{ {
return nvkm_mmu_new_(&gv100_mmu, device, index, pmmu); return nvkm_mmu_new_(&gv100_mmu, device, type, inst, pmmu);
} }
...@@ -35,7 +35,8 @@ mcp77_mmu = { ...@@ -35,7 +35,8 @@ mcp77_mmu = {
}; };
int int
mcp77_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) mcp77_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
struct nvkm_mmu **pmmu)
{ {
return nvkm_mmu_new_(&mcp77_mmu, device, index, pmmu); return nvkm_mmu_new_(&mcp77_mmu, device, type, inst, pmmu);
} }
...@@ -35,7 +35,8 @@ nv04_mmu = { ...@@ -35,7 +35,8 @@ nv04_mmu = {
}; };
int int
nv04_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) nv04_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
struct nvkm_mmu **pmmu)
{ {
return nvkm_mmu_new_(&nv04_mmu, device, index, pmmu); return nvkm_mmu_new_(&nv04_mmu, device, type, inst, pmmu);
} }
...@@ -47,11 +47,12 @@ nv41_mmu = { ...@@ -47,11 +47,12 @@ nv41_mmu = {
}; };
int int
nv41_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) nv41_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
struct nvkm_mmu **pmmu)
{ {
if (device->type == NVKM_DEVICE_AGP || if (device->type == NVKM_DEVICE_AGP ||
!nvkm_boolopt(device->cfgopt, "NvPCIE", true)) !nvkm_boolopt(device->cfgopt, "NvPCIE", true))
return nv04_mmu_new(device, index, pmmu); return nv04_mmu_new(device, type, inst, pmmu);
return nvkm_mmu_new_(&nv41_mmu, device, index, pmmu); return nvkm_mmu_new_(&nv41_mmu, device, type, inst, pmmu);
} }
...@@ -62,11 +62,12 @@ nv44_mmu = { ...@@ -62,11 +62,12 @@ nv44_mmu = {
}; };
int int
nv44_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) nv44_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
struct nvkm_mmu **pmmu)
{ {
if (device->type == NVKM_DEVICE_AGP || if (device->type == NVKM_DEVICE_AGP ||
!nvkm_boolopt(device->cfgopt, "NvPCIE", true)) !nvkm_boolopt(device->cfgopt, "NvPCIE", true))
return nv04_mmu_new(device, index, pmmu); return nv04_mmu_new(device, type, inst, pmmu);
return nvkm_mmu_new_(&nv44_mmu, device, index, pmmu); return nvkm_mmu_new_(&nv44_mmu, device, type, inst, pmmu);
} }
...@@ -71,7 +71,8 @@ nv50_mmu = { ...@@ -71,7 +71,8 @@ nv50_mmu = {
}; };
int int
nv50_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) nv50_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
struct nvkm_mmu **pmmu)
{ {
return nvkm_mmu_new_(&nv50_mmu, device, index, pmmu); return nvkm_mmu_new_(&nv50_mmu, device, type, inst, pmmu);
} }
...@@ -4,10 +4,10 @@ ...@@ -4,10 +4,10 @@
#define nvkm_mmu(p) container_of((p), struct nvkm_mmu, subdev) #define nvkm_mmu(p) container_of((p), struct nvkm_mmu, subdev)
#include <subdev/mmu.h> #include <subdev/mmu.h>
void nvkm_mmu_ctor(const struct nvkm_mmu_func *, struct nvkm_device *, void nvkm_mmu_ctor(const struct nvkm_mmu_func *, struct nvkm_device *, enum nvkm_subdev_type, int,
int index, struct nvkm_mmu *); struct nvkm_mmu *);
int nvkm_mmu_new_(const struct nvkm_mmu_func *, struct nvkm_device *, int nvkm_mmu_new_(const struct nvkm_mmu_func *, struct nvkm_device *, enum nvkm_subdev_type, int,
int index, struct nvkm_mmu **); struct nvkm_mmu **);
struct nvkm_mmu_func { struct nvkm_mmu_func {
void (*init)(struct nvkm_mmu *); void (*init)(struct nvkm_mmu *);
......
...@@ -51,7 +51,8 @@ tu102_mmu = { ...@@ -51,7 +51,8 @@ tu102_mmu = {
}; };
int int
tu102_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu) tu102_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
struct nvkm_mmu **pmmu)
{ {
return nvkm_mmu_new_(&tu102_mmu, device, index, pmmu); return nvkm_mmu_new_(&tu102_mmu, device, type, inst, pmmu);
} }
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