Commit 917b24a3 authored by Ben Skeggs's avatar Ben Skeggs

drm/nouveau/bar: switch to instanced constructor

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
parent c288b4de
...@@ -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_bar *bar;
struct nvkm_bios *bios; struct nvkm_bios *bios;
struct nvkm_bus *bus; struct nvkm_bus *bus;
struct nvkm_clk *clk; struct nvkm_clk *clk;
...@@ -147,7 +146,6 @@ struct nvkm_device_chip { ...@@ -147,7 +146,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 (*bar )(struct nvkm_device *, int idx, struct nvkm_bar **);
int (*bios )(struct nvkm_device *, int idx, struct nvkm_bios **); int (*bios )(struct nvkm_device *, int idx, struct nvkm_bios **);
int (*bus )(struct nvkm_device *, int idx, struct nvkm_bus **); int (*bus )(struct nvkm_device *, int idx, struct nvkm_bus **);
int (*clk )(struct nvkm_device *, int idx, struct nvkm_clk **); int (*clk )(struct nvkm_device *, int idx, struct nvkm_clk **);
......
/* SPDX-License-Identifier: MIT */ /* SPDX-License-Identifier: MIT */
NVKM_LAYOUT_ONCE(NVKM_SUBDEV_BAR , struct nvkm_bar , bar)
NVKM_LAYOUT_ONCE(NVKM_SUBDEV_ACR , struct nvkm_acr , acr) NVKM_LAYOUT_ONCE(NVKM_SUBDEV_ACR , struct nvkm_acr , acr)
...@@ -23,11 +23,11 @@ void nvkm_bar_bar2_reset(struct nvkm_device *); ...@@ -23,11 +23,11 @@ void nvkm_bar_bar2_reset(struct nvkm_device *);
struct nvkm_vmm *nvkm_bar_bar2_vmm(struct nvkm_device *); struct nvkm_vmm *nvkm_bar_bar2_vmm(struct nvkm_device *);
void nvkm_bar_flush(struct nvkm_bar *); void nvkm_bar_flush(struct nvkm_bar *);
int nv50_bar_new(struct nvkm_device *, int, struct nvkm_bar **); int nv50_bar_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_bar **);
int g84_bar_new(struct nvkm_device *, int, struct nvkm_bar **); int g84_bar_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_bar **);
int gf100_bar_new(struct nvkm_device *, int, struct nvkm_bar **); int gf100_bar_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_bar **);
int gk20a_bar_new(struct nvkm_device *, int, struct nvkm_bar **); int gk20a_bar_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_bar **);
int gm107_bar_new(struct nvkm_device *, int, struct nvkm_bar **); int gm107_bar_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_bar **);
int gm20b_bar_new(struct nvkm_device *, int, struct nvkm_bar **); int gm20b_bar_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_bar **);
int tu102_bar_new(struct nvkm_device *, int, struct nvkm_bar **); int tu102_bar_new(struct nvkm_device *, enum nvkm_subdev_type, int inst, struct nvkm_bar **);
#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_BAR ] = "bar",
[NVKM_SUBDEV_VBIOS ] = "bios", [NVKM_SUBDEV_VBIOS ] = "bios",
[NVKM_SUBDEV_BUS ] = "bus", [NVKM_SUBDEV_BUS ] = "bus",
[NVKM_SUBDEV_CLK ] = "clk", [NVKM_SUBDEV_CLK ] = "clk",
......
...@@ -134,9 +134,9 @@ nvkm_bar = { ...@@ -134,9 +134,9 @@ nvkm_bar = {
void void
nvkm_bar_ctor(const struct nvkm_bar_func *func, struct nvkm_device *device, nvkm_bar_ctor(const struct nvkm_bar_func *func, struct nvkm_device *device,
int index, struct nvkm_bar *bar) enum nvkm_subdev_type type, int inst, struct nvkm_bar *bar)
{ {
nvkm_subdev_ctor(&nvkm_bar, device, index, &bar->subdev); nvkm_subdev_ctor(&nvkm_bar, device, type, inst, &bar->subdev);
bar->func = func; bar->func = func;
spin_lock_init(&bar->lock); spin_lock_init(&bar->lock);
} }
...@@ -56,7 +56,8 @@ g84_bar_func = { ...@@ -56,7 +56,8 @@ g84_bar_func = {
}; };
int int
g84_bar_new(struct nvkm_device *device, int index, struct nvkm_bar **pbar) g84_bar_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
struct nvkm_bar **pbar)
{ {
return nv50_bar_new_(&g84_bar_func, device, index, 0x200, pbar); return nv50_bar_new_(&g84_bar_func, device, type, inst, 0x200, pbar);
} }
...@@ -162,12 +162,12 @@ gf100_bar_dtor(struct nvkm_bar *base) ...@@ -162,12 +162,12 @@ gf100_bar_dtor(struct nvkm_bar *base)
int int
gf100_bar_new_(const struct nvkm_bar_func *func, struct nvkm_device *device, gf100_bar_new_(const struct nvkm_bar_func *func, struct nvkm_device *device,
int index, struct nvkm_bar **pbar) enum nvkm_subdev_type type, int inst, struct nvkm_bar **pbar)
{ {
struct gf100_bar *bar; struct gf100_bar *bar;
if (!(bar = kzalloc(sizeof(*bar), GFP_KERNEL))) if (!(bar = kzalloc(sizeof(*bar), GFP_KERNEL)))
return -ENOMEM; return -ENOMEM;
nvkm_bar_ctor(func, device, index, &bar->base); nvkm_bar_ctor(func, device, type, inst, &bar->base);
bar->bar2_halve = nvkm_boolopt(device->cfgopt, "NvBar2Halve", false); bar->bar2_halve = nvkm_boolopt(device->cfgopt, "NvBar2Halve", false);
*pbar = &bar->base; *pbar = &bar->base;
return 0; return 0;
...@@ -189,7 +189,8 @@ gf100_bar_func = { ...@@ -189,7 +189,8 @@ gf100_bar_func = {
}; };
int int
gf100_bar_new(struct nvkm_device *device, int index, struct nvkm_bar **pbar) gf100_bar_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
struct nvkm_bar **pbar)
{ {
return gf100_bar_new_(&gf100_bar_func, device, index, pbar); return gf100_bar_new_(&gf100_bar_func, device, type, inst, pbar);
} }
...@@ -15,7 +15,7 @@ struct gf100_bar { ...@@ -15,7 +15,7 @@ struct gf100_bar {
struct gf100_barN bar[2]; struct gf100_barN bar[2];
}; };
int gf100_bar_new_(const struct nvkm_bar_func *, struct nvkm_device *, int gf100_bar_new_(const struct nvkm_bar_func *, struct nvkm_device *, enum nvkm_subdev_type,
int, struct nvkm_bar **); int, struct nvkm_bar **);
void *gf100_bar_dtor(struct nvkm_bar *); void *gf100_bar_dtor(struct nvkm_bar *);
int gf100_bar_oneinit(struct nvkm_bar *); int gf100_bar_oneinit(struct nvkm_bar *);
......
...@@ -32,9 +32,10 @@ gk20a_bar_func = { ...@@ -32,9 +32,10 @@ gk20a_bar_func = {
}; };
int int
gk20a_bar_new(struct nvkm_device *device, int index, struct nvkm_bar **pbar) gk20a_bar_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
struct nvkm_bar **pbar)
{ {
int ret = gf100_bar_new_(&gk20a_bar_func, device, index, pbar); int ret = gf100_bar_new_(&gk20a_bar_func, device, type, inst, pbar);
if (ret == 0) if (ret == 0)
(*pbar)->iomap_uncached = true; (*pbar)->iomap_uncached = true;
return ret; return ret;
......
...@@ -59,7 +59,8 @@ gm107_bar_func = { ...@@ -59,7 +59,8 @@ gm107_bar_func = {
}; };
int int
gm107_bar_new(struct nvkm_device *device, int index, struct nvkm_bar **pbar) gm107_bar_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
struct nvkm_bar **pbar)
{ {
return gf100_bar_new_(&gm107_bar_func, device, index, pbar); return gf100_bar_new_(&gm107_bar_func, device, type, inst, pbar);
} }
...@@ -32,9 +32,10 @@ gm20b_bar_func = { ...@@ -32,9 +32,10 @@ gm20b_bar_func = {
}; };
int int
gm20b_bar_new(struct nvkm_device *device, int index, struct nvkm_bar **pbar) gm20b_bar_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
struct nvkm_bar **pbar)
{ {
int ret = gf100_bar_new_(&gm20b_bar_func, device, index, pbar); int ret = gf100_bar_new_(&gm20b_bar_func, device, type, inst, pbar);
if (ret == 0) if (ret == 0)
(*pbar)->iomap_uncached = true; (*pbar)->iomap_uncached = true;
return ret; return ret;
......
...@@ -220,12 +220,12 @@ nv50_bar_dtor(struct nvkm_bar *base) ...@@ -220,12 +220,12 @@ nv50_bar_dtor(struct nvkm_bar *base)
int int
nv50_bar_new_(const struct nvkm_bar_func *func, struct nvkm_device *device, nv50_bar_new_(const struct nvkm_bar_func *func, struct nvkm_device *device,
int index, u32 pgd_addr, struct nvkm_bar **pbar) enum nvkm_subdev_type type, int inst, u32 pgd_addr, struct nvkm_bar **pbar)
{ {
struct nv50_bar *bar; struct nv50_bar *bar;
if (!(bar = kzalloc(sizeof(*bar), GFP_KERNEL))) if (!(bar = kzalloc(sizeof(*bar), GFP_KERNEL)))
return -ENOMEM; return -ENOMEM;
nvkm_bar_ctor(func, device, index, &bar->base); nvkm_bar_ctor(func, device, type, inst, &bar->base);
bar->pgd_addr = pgd_addr; bar->pgd_addr = pgd_addr;
*pbar = &bar->base; *pbar = &bar->base;
return 0; return 0;
...@@ -248,7 +248,8 @@ nv50_bar_func = { ...@@ -248,7 +248,8 @@ nv50_bar_func = {
}; };
int int
nv50_bar_new(struct nvkm_device *device, int index, struct nvkm_bar **pbar) nv50_bar_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
struct nvkm_bar **pbar)
{ {
return nv50_bar_new_(&nv50_bar_func, device, index, 0x1400, pbar); return nv50_bar_new_(&nv50_bar_func, device, type, inst, 0x1400, pbar);
} }
...@@ -16,7 +16,7 @@ struct nv50_bar { ...@@ -16,7 +16,7 @@ struct nv50_bar {
struct nvkm_gpuobj *bar2; struct nvkm_gpuobj *bar2;
}; };
int nv50_bar_new_(const struct nvkm_bar_func *, struct nvkm_device *, int nv50_bar_new_(const struct nvkm_bar_func *, struct nvkm_device *, enum nvkm_subdev_type,
int, u32 pgd_addr, struct nvkm_bar **); int, u32 pgd_addr, struct nvkm_bar **);
void *nv50_bar_dtor(struct nvkm_bar *); void *nv50_bar_dtor(struct nvkm_bar *);
int nv50_bar_oneinit(struct nvkm_bar *); int nv50_bar_oneinit(struct nvkm_bar *);
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
#include <subdev/bar.h> #include <subdev/bar.h>
void nvkm_bar_ctor(const struct nvkm_bar_func *, struct nvkm_device *, void nvkm_bar_ctor(const struct nvkm_bar_func *, struct nvkm_device *,
int, struct nvkm_bar *); enum nvkm_subdev_type, int, struct nvkm_bar *);
struct nvkm_bar_func { struct nvkm_bar_func {
void *(*dtor)(struct nvkm_bar *); void *(*dtor)(struct nvkm_bar *);
......
...@@ -92,7 +92,8 @@ tu102_bar = { ...@@ -92,7 +92,8 @@ tu102_bar = {
}; };
int int
tu102_bar_new(struct nvkm_device *device, int index, struct nvkm_bar **pbar) tu102_bar_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
struct nvkm_bar **pbar)
{ {
return gf100_bar_new_(&tu102_bar, device, index, pbar); return gf100_bar_new_(&tu102_bar, device, type, inst, pbar);
} }
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