Reviewed-By: Karol Herbst <[email protected]>
2016-10-27 9:55 GMT+02:00 Alexandre Courbot <[email protected]>: > gm20b's FB has the same capabilities as gm200, minus the ability to > allocate RAM. Create a device that reflects this instead of re-using the > gk20a device which may be incorrect. > > Signed-off-by: Alexandre Courbot <[email protected]> > --- > drm/nouveau/include/nvkm/subdev/fb.h | 1 + > drm/nouveau/nvkm/engine/device/base.c | 2 +- > drm/nouveau/nvkm/subdev/fb/Kbuild | 1 + > drm/nouveau/nvkm/subdev/fb/gf100.h | 4 ++++ > drm/nouveau/nvkm/subdev/fb/gm200.c | 2 +- > drm/nouveau/nvkm/subdev/fb/gm20b.c | 40 > +++++++++++++++++++++++++++++++++++ > 6 files changed, 48 insertions(+), 2 deletions(-) > create mode 100644 drm/nouveau/nvkm/subdev/fb/gm20b.c > > diff --git a/drm/nouveau/include/nvkm/subdev/fb.h > b/drm/nouveau/include/nvkm/subdev/fb.h > index 3a410275fa71..cf681065863e 100644 > --- a/drm/nouveau/include/nvkm/subdev/fb.h > +++ b/drm/nouveau/include/nvkm/subdev/fb.h > @@ -93,6 +93,7 @@ int gk104_fb_new(struct nvkm_device *, int, struct nvkm_fb > **); > int gk20a_fb_new(struct nvkm_device *, int, struct nvkm_fb **); > int gm107_fb_new(struct nvkm_device *, int, struct nvkm_fb **); > int gm200_fb_new(struct nvkm_device *, int, struct nvkm_fb **); > +int gm20b_fb_new(struct nvkm_device *, int, struct nvkm_fb **); > int gp100_fb_new(struct nvkm_device *, int, struct nvkm_fb **); > int gp104_fb_new(struct nvkm_device *, int, struct nvkm_fb **); > > diff --git a/drm/nouveau/nvkm/engine/device/base.c > b/drm/nouveau/nvkm/engine/device/base.c > index 53d171729353..52d932d9df7c 100644 > --- a/drm/nouveau/nvkm/engine/device/base.c > +++ b/drm/nouveau/nvkm/engine/device/base.c > @@ -2131,7 +2131,7 @@ nv12b_chipset = { > .bar = gk20a_bar_new, > .bus = gf100_bus_new, > .clk = gm20b_clk_new, > - .fb = gk20a_fb_new, > + .fb = gm20b_fb_new, > .fuse = gm107_fuse_new, > .ibus = gk20a_ibus_new, > .imem = gk20a_instmem_new, > diff --git a/drm/nouveau/nvkm/subdev/fb/Kbuild > b/drm/nouveau/nvkm/subdev/fb/Kbuild > index edcc157e6ac8..ef47d57fcb87 100644 > --- a/drm/nouveau/nvkm/subdev/fb/Kbuild > +++ b/drm/nouveau/nvkm/subdev/fb/Kbuild > @@ -24,6 +24,7 @@ nvkm-y += nvkm/subdev/fb/gk104.o > nvkm-y += nvkm/subdev/fb/gk20a.o > nvkm-y += nvkm/subdev/fb/gm107.o > nvkm-y += nvkm/subdev/fb/gm200.o > +nvkm-y += nvkm/subdev/fb/gm20b.o > nvkm-y += nvkm/subdev/fb/gp100.o > nvkm-y += nvkm/subdev/fb/gp104.o > > diff --git a/drm/nouveau/nvkm/subdev/fb/gf100.h > b/drm/nouveau/nvkm/subdev/fb/gf100.h > index 449f431644b3..412eb89834e8 100644 > --- a/drm/nouveau/nvkm/subdev/fb/gf100.h > +++ b/drm/nouveau/nvkm/subdev/fb/gf100.h > @@ -16,4 +16,8 @@ void gf100_fb_init(struct nvkm_fb *); > void gf100_fb_intr(struct nvkm_fb *); > > void gp100_fb_init(struct nvkm_fb *); > + > +void gm200_fb_init_page(struct nvkm_fb *fb); > +void gm200_fb_init(struct nvkm_fb *base); > + > #endif > diff --git a/drm/nouveau/nvkm/subdev/fb/gm200.c > b/drm/nouveau/nvkm/subdev/fb/gm200.c > index 62f653240be3..fe5886013ac0 100644 > --- a/drm/nouveau/nvkm/subdev/fb/gm200.c > +++ b/drm/nouveau/nvkm/subdev/fb/gm200.c > @@ -44,7 +44,7 @@ gm200_fb_init_page(struct nvkm_fb *fb) > } > } > > -static void > +void > gm200_fb_init(struct nvkm_fb *base) > { > struct gf100_fb *fb = gf100_fb(base); > diff --git a/drm/nouveau/nvkm/subdev/fb/gm20b.c > b/drm/nouveau/nvkm/subdev/fb/gm20b.c > new file mode 100644 > index 000000000000..b87c233bcd6d > --- /dev/null > +++ b/drm/nouveau/nvkm/subdev/fb/gm20b.c > @@ -0,0 +1,40 @@ > +/* > + * Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. > + * > + * Permission is hereby granted, free of charge, to any person obtaining a > + * copy of this software and associated documentation files (the "Software"), > + * to deal in the Software without restriction, including without limitation > + * the rights to use, copy, modify, merge, publish, distribute, sublicense, > + * and/or sell copies of the Software, and to permit persons to whom the > + * Software is furnished to do so, subject to the following conditions: > + * > + * The above copyright notice and this permission notice shall be included in > + * all copies or substantial portions of the Software. > + * > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL > + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING > + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER > + * DEALINGS IN THE SOFTWARE. > + */ > +#include "priv.h" > +#include "gf100.h" > + > +/* GM20B's FB is similar to GM200, but without the ability to allocate VRAM > */ > +static const struct nvkm_fb_func > +gm20b_fb = { > + .dtor = gf100_fb_dtor, > + .oneinit = gf100_fb_oneinit, > + .init = gm200_fb_init, > + .init_page = gm200_fb_init_page, > + .intr = gf100_fb_intr, > + .memtype_valid = gf100_fb_memtype_valid, > +}; > + > +int > +gm20b_fb_new(struct nvkm_device *device, int index, struct nvkm_fb **pfb) > +{ > + return gf100_fb_new_(&gm20b_fb, device, index, pfb); > +} > -- > 2.10.0 > > _______________________________________________ > Nouveau mailing list > [email protected] > https://lists.freedesktop.org/mailman/listinfo/nouveau _______________________________________________ Nouveau mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/nouveau
