[Nouveau] [RFC PATCH] drm/nouveau: split off nvc0 compilation
Ilia Mirkin
imirkin at alum.mit.edu
Fri Feb 14 18:32:32 PST 2014
On Fri, Feb 14, 2014 at 7:38 PM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
> So... I was wondering what the impact of splitting up the card compilation by
> e.g. generation would be. Depending on the split things would get fairly
> intertwined, so I thought I'd start small. This just splits NVC0 from
> everything else. I figure that for the people this matters the most to, NVC0
> is the least relevant card -- people with sub-1GB of RAM, older hardware.
>
> With my config options and everything compiled, the total size of nouveau.ko
> is 1343324 bytes (incl symbols), which is split up
>
> text data bss dec hex filename
> 579171 184264 480 763915 ba80b ./drivers/gpu/drm/nouveau/nouveau.ko
>
> Turning off nvc0+ gives us 995667 bytes, split up
>
> text data bss dec hex filename
> 472244 59528 480 532252 81f1c ./drivers/gpu/drm/nouveau/nouveau.ko
>
> So we lost 100K of text and 130K of data (probably all that pgraph fw), and
> the remaining 100K must be symbols. (I'm not stripping because nobody in their
> right mind strips these kernel modules.)
In a local patch that also lops off pre-nv50 cards (with one small
problem that involves moving a function somewhere -- seems like
nouveau_crtc_set_config is defined in dispnv04 but used outside of it
-- which I haven't done yet) the module size goes down to 721366,
split up as:
text data bss dec hex filename
346212 34727 480 381419 5d1eb ./drivers/gpu/drm/nouveau/nouveau.ko
So another 130K of text, 26K of data, and 130K in symbols (?). I
didn't have to do anything too dirty, with the mild exception of the
device/base.c file which had that giant if statement, which will have
to be done a bit more cleverly now to not end up as a maze. My final
exercise will be to try to lop off nv50 as well, making the driver
~useless, but still interesting as it would allow one to only compile
one of the 3 categories (or any combo).
>
> The impact to the code is pretty minor. Depending on the situation it's easier
> to either ifdef out code or to provide stubs for functions.
>
> What do people think about this? It shouldn't be too difficult for me to
> extend this to categories like <pre-nv50> <nv50-nvc0> <nvc0-nve0> <nve0+>, or
> maybe even more fine-grained, esp since nvd0 is when a lot of changes
> happened. Or maybe less-fine-grained and keep the nvc0/nve0 cards under one
> option.
>
> Feedback appreciated.
>
> Not-Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
>
> ---
>
> drivers/gpu/drm/nouveau/Kconfig | 11 +-
> drivers/gpu/drm/nouveau/Makefile | 136 +++++++++++-----------
> drivers/gpu/drm/nouveau/core/engine/device/base.c | 2 +
> drivers/gpu/drm/nouveau/nouveau_drm.c | 4 +-
> drivers/gpu/drm/nouveau/nouveau_fbcon.h | 16 +++
> 5 files changed, 98 insertions(+), 71 deletions(-)
>
> diff --git a/drivers/gpu/drm/nouveau/Kconfig b/drivers/gpu/drm/nouveau/Kconfig
> index 7cf787d..927fc38 100644
> --- a/drivers/gpu/drm/nouveau/Kconfig
> +++ b/drivers/gpu/drm/nouveau/Kconfig
> @@ -26,9 +26,14 @@ config DRM_NOUVEAU
> help
> Choose this option for open-source nVidia support.
>
> +if DRM_NOUVEAU
> +
> +config DRM_NOUVEAU_NVC0
> + bool "NVC0+ (Fermi / Kepler)"
> + default y
> +
> config NOUVEAU_DEBUG
> int "Maximum debug level"
> - depends on DRM_NOUVEAU
> range 0 7
> default 5
> help
> @@ -48,7 +53,6 @@ config NOUVEAU_DEBUG
>
> config NOUVEAU_DEBUG_DEFAULT
> int "Default debug level"
> - depends on DRM_NOUVEAU
> range 0 7
> default 3
> help
> @@ -56,8 +60,9 @@ config NOUVEAU_DEBUG_DEFAULT
>
> config DRM_NOUVEAU_BACKLIGHT
> bool "Support for backlight control"
> - depends on DRM_NOUVEAU
> default y
> help
> Say Y here if you want to control the backlight of your display
> (e.g. a laptop panel).
> +
> +endif
> diff --git a/drivers/gpu/drm/nouveau/Makefile b/drivers/gpu/drm/nouveau/Makefile
> index d310c19..a1e8513 100644
> --- a/drivers/gpu/drm/nouveau/Makefile
> +++ b/drivers/gpu/drm/nouveau/Makefile
> @@ -25,7 +25,7 @@ nouveau-y += core/core/subdev.o
>
> nouveau-y += core/subdev/bar/base.o
> nouveau-y += core/subdev/bar/nv50.o
> -nouveau-y += core/subdev/bar/nvc0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/subdev/bar/nvc0.o
> nouveau-y += core/subdev/bios/base.o
> nouveau-y += core/subdev/bios/bit.o
> nouveau-y += core/subdev/bios/boost.o
> @@ -53,7 +53,7 @@ nouveau-y += core/subdev/bus/nv04.o
> nouveau-y += core/subdev/bus/nv31.o
> nouveau-y += core/subdev/bus/nv50.o
> nouveau-y += core/subdev/bus/nv94.o
> -nouveau-y += core/subdev/bus/nvc0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/subdev/bus/nvc0.o
> nouveau-y += core/subdev/clock/base.o
> nouveau-y += core/subdev/clock/nv04.o
> nouveau-y += core/subdev/clock/nv40.o
> @@ -61,8 +61,8 @@ nouveau-y += core/subdev/clock/nv50.o
> nouveau-y += core/subdev/clock/nv84.o
> nouveau-y += core/subdev/clock/nva3.o
> nouveau-y += core/subdev/clock/nvaa.o
> -nouveau-y += core/subdev/clock/nvc0.o
> -nouveau-y += core/subdev/clock/nve0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/subdev/clock/nvc0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/subdev/clock/nve0.o
> nouveau-y += core/subdev/clock/pllnv04.o
> nouveau-y += core/subdev/clock/pllnva3.o
> nouveau-y += core/subdev/devinit/base.o
> @@ -76,7 +76,7 @@ nouveau-y += core/subdev/devinit/nv84.o
> nouveau-y += core/subdev/devinit/nv98.o
> nouveau-y += core/subdev/devinit/nva3.o
> nouveau-y += core/subdev/devinit/nvaf.o
> -nouveau-y += core/subdev/devinit/nvc0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/subdev/devinit/nvc0.o
> nouveau-y += core/subdev/fb/base.o
> nouveau-y += core/subdev/fb/nv04.o
> nouveau-y += core/subdev/fb/nv10.o
> @@ -98,8 +98,8 @@ nouveau-y += core/subdev/fb/nv84.o
> nouveau-y += core/subdev/fb/nva3.o
> nouveau-y += core/subdev/fb/nvaa.o
> nouveau-y += core/subdev/fb/nvaf.o
> -nouveau-y += core/subdev/fb/nvc0.o
> -nouveau-y += core/subdev/fb/nve0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/subdev/fb/nvc0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/subdev/fb/nve0.o
> nouveau-y += core/subdev/fb/ramnv04.o
> nouveau-y += core/subdev/fb/ramnv10.o
> nouveau-y += core/subdev/fb/ramnv1a.o
> @@ -112,15 +112,15 @@ nouveau-y += core/subdev/fb/ramnv4e.o
> nouveau-y += core/subdev/fb/ramnv50.o
> nouveau-y += core/subdev/fb/ramnva3.o
> nouveau-y += core/subdev/fb/ramnvaa.o
> -nouveau-y += core/subdev/fb/ramnvc0.o
> -nouveau-y += core/subdev/fb/ramnve0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/subdev/fb/ramnvc0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/subdev/fb/ramnve0.o
> nouveau-y += core/subdev/fb/sddr3.o
> nouveau-y += core/subdev/fb/gddr5.o
> nouveau-y += core/subdev/gpio/base.o
> nouveau-y += core/subdev/gpio/nv10.o
> nouveau-y += core/subdev/gpio/nv50.o
> -nouveau-y += core/subdev/gpio/nvd0.o
> -nouveau-y += core/subdev/gpio/nve0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/subdev/gpio/nvd0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/subdev/gpio/nve0.o
> nouveau-y += core/subdev/i2c/base.o
> nouveau-y += core/subdev/i2c/anx9805.o
> nouveau-y += core/subdev/i2c/aux.o
> @@ -129,14 +129,14 @@ nouveau-y += core/subdev/i2c/nv04.o
> nouveau-y += core/subdev/i2c/nv4e.o
> nouveau-y += core/subdev/i2c/nv50.o
> nouveau-y += core/subdev/i2c/nv94.o
> -nouveau-y += core/subdev/i2c/nvd0.o
> -nouveau-y += core/subdev/ibus/nvc0.o
> -nouveau-y += core/subdev/ibus/nve0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/subdev/i2c/nvd0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/subdev/ibus/nvc0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/subdev/ibus/nve0.o
> nouveau-y += core/subdev/instmem/base.o
> nouveau-y += core/subdev/instmem/nv04.o
> nouveau-y += core/subdev/instmem/nv40.o
> nouveau-y += core/subdev/instmem/nv50.o
> -nouveau-y += core/subdev/ltcg/nvc0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/subdev/ltcg/nvc0.o
> nouveau-y += core/subdev/mc/base.o
> nouveau-y += core/subdev/mc/nv04.o
> nouveau-y += core/subdev/mc/nv40.o
> @@ -145,17 +145,17 @@ nouveau-y += core/subdev/mc/nv4c.o
> nouveau-y += core/subdev/mc/nv50.o
> nouveau-y += core/subdev/mc/nv94.o
> nouveau-y += core/subdev/mc/nv98.o
> -nouveau-y += core/subdev/mc/nvc0.o
> -nouveau-y += core/subdev/mc/nvc3.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/subdev/mc/nvc0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/subdev/mc/nvc3.o
> nouveau-y += core/subdev/mxm/base.o
> nouveau-y += core/subdev/mxm/mxms.o
> nouveau-y += core/subdev/mxm/nv50.o
> nouveau-y += core/subdev/pwr/base.o
> nouveau-y += core/subdev/pwr/memx.o
> nouveau-y += core/subdev/pwr/nva3.o
> -nouveau-y += core/subdev/pwr/nvc0.o
> -nouveau-y += core/subdev/pwr/nvd0.o
> -nouveau-y += core/subdev/pwr/nv108.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/subdev/pwr/nvc0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/subdev/pwr/nvd0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/subdev/pwr/nv108.o
> nouveau-y += core/subdev/therm/base.o
> nouveau-y += core/subdev/therm/fan.o
> nouveau-y += core/subdev/therm/fannil.o
> @@ -167,7 +167,7 @@ nouveau-y += core/subdev/therm/nv40.o
> nouveau-y += core/subdev/therm/nv50.o
> nouveau-y += core/subdev/therm/nv84.o
> nouveau-y += core/subdev/therm/nva3.o
> -nouveau-y += core/subdev/therm/nvd0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/subdev/therm/nvd0.o
> nouveau-y += core/subdev/timer/base.o
> nouveau-y += core/subdev/timer/nv04.o
> nouveau-y += core/subdev/vm/base.o
> @@ -175,7 +175,7 @@ nouveau-y += core/subdev/vm/nv04.o
> nouveau-y += core/subdev/vm/nv41.o
> nouveau-y += core/subdev/vm/nv44.o
> nouveau-y += core/subdev/vm/nv50.o
> -nouveau-y += core/subdev/vm/nvc0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/subdev/vm/nvc0.o
> nouveau-y += core/subdev/volt/base.o
> nouveau-y += core/subdev/volt/gpio.o
> nouveau-y += core/subdev/volt/nv40.o
> @@ -185,15 +185,15 @@ nouveau-y += core/engine/xtensa.o
> nouveau-y += core/engine/dmaobj/base.o
> nouveau-y += core/engine/dmaobj/nv04.o
> nouveau-y += core/engine/dmaobj/nv50.o
> -nouveau-y += core/engine/dmaobj/nvc0.o
> -nouveau-y += core/engine/dmaobj/nvd0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/dmaobj/nvc0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/dmaobj/nvd0.o
> nouveau-y += core/engine/bsp/nv84.o
> nouveau-y += core/engine/bsp/nv98.o
> -nouveau-y += core/engine/bsp/nvc0.o
> -nouveau-y += core/engine/bsp/nve0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/bsp/nvc0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/bsp/nve0.o
> nouveau-y += core/engine/copy/nva3.o
> -nouveau-y += core/engine/copy/nvc0.o
> -nouveau-y += core/engine/copy/nve0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/copy/nvc0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/copy/nve0.o
> nouveau-y += core/engine/crypt/nv84.o
> nouveau-y += core/engine/crypt/nv98.o
> nouveau-y += core/engine/device/base.o
> @@ -204,8 +204,8 @@ nouveau-y += core/engine/device/nv20.o
> nouveau-y += core/engine/device/nv30.o
> nouveau-y += core/engine/device/nv40.o
> nouveau-y += core/engine/device/nv50.o
> -nouveau-y += core/engine/device/nvc0.o
> -nouveau-y += core/engine/device/nve0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/device/nvc0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/device/nve0.o
> nouveau-y += core/engine/disp/base.o
> nouveau-y += core/engine/disp/nv04.o
> nouveau-y += core/engine/disp/nv50.o
> @@ -213,20 +213,20 @@ nouveau-y += core/engine/disp/nv84.o
> nouveau-y += core/engine/disp/nv94.o
> nouveau-y += core/engine/disp/nva0.o
> nouveau-y += core/engine/disp/nva3.o
> -nouveau-y += core/engine/disp/nvd0.o
> -nouveau-y += core/engine/disp/nve0.o
> -nouveau-y += core/engine/disp/nvf0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/disp/nvd0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/disp/nve0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/disp/nvf0.o
> nouveau-y += core/engine/disp/dacnv50.o
> nouveau-y += core/engine/disp/dport.o
> nouveau-y += core/engine/disp/hdanva3.o
> -nouveau-y += core/engine/disp/hdanvd0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/disp/hdanvd0.o
> nouveau-y += core/engine/disp/hdminv84.o
> nouveau-y += core/engine/disp/hdminva3.o
> -nouveau-y += core/engine/disp/hdminvd0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/disp/hdminvd0.o
> nouveau-y += core/engine/disp/piornv50.o
> nouveau-y += core/engine/disp/sornv50.o
> nouveau-y += core/engine/disp/sornv94.o
> -nouveau-y += core/engine/disp/sornvd0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/disp/sornvd0.o
> nouveau-y += core/engine/disp/vga.o
> nouveau-y += core/engine/fifo/base.o
> nouveau-y += core/engine/fifo/nv04.o
> @@ -235,20 +235,20 @@ nouveau-y += core/engine/fifo/nv17.o
> nouveau-y += core/engine/fifo/nv40.o
> nouveau-y += core/engine/fifo/nv50.o
> nouveau-y += core/engine/fifo/nv84.o
> -nouveau-y += core/engine/fifo/nvc0.o
> -nouveau-y += core/engine/fifo/nve0.o
> -nouveau-y += core/engine/fifo/nv108.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/fifo/nvc0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/fifo/nve0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/fifo/nv108.o
> nouveau-y += core/engine/graph/ctxnv40.o
> nouveau-y += core/engine/graph/ctxnv50.o
> -nouveau-y += core/engine/graph/ctxnvc0.o
> -nouveau-y += core/engine/graph/ctxnvc1.o
> -nouveau-y += core/engine/graph/ctxnvc3.o
> -nouveau-y += core/engine/graph/ctxnvc8.o
> -nouveau-y += core/engine/graph/ctxnvd7.o
> -nouveau-y += core/engine/graph/ctxnvd9.o
> -nouveau-y += core/engine/graph/ctxnve4.o
> -nouveau-y += core/engine/graph/ctxnvf0.o
> -nouveau-y += core/engine/graph/ctxnv108.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/graph/ctxnvc0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/graph/ctxnvc1.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/graph/ctxnvc3.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/graph/ctxnvc8.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/graph/ctxnvd7.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/graph/ctxnvd9.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/graph/ctxnve4.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/graph/ctxnvf0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/graph/ctxnv108.o
> nouveau-y += core/engine/graph/nv04.o
> nouveau-y += core/engine/graph/nv10.o
> nouveau-y += core/engine/graph/nv20.o
> @@ -259,15 +259,15 @@ nouveau-y += core/engine/graph/nv34.o
> nouveau-y += core/engine/graph/nv35.o
> nouveau-y += core/engine/graph/nv40.o
> nouveau-y += core/engine/graph/nv50.o
> -nouveau-y += core/engine/graph/nvc0.o
> -nouveau-y += core/engine/graph/nvc1.o
> -nouveau-y += core/engine/graph/nvc3.o
> -nouveau-y += core/engine/graph/nvc8.o
> -nouveau-y += core/engine/graph/nvd7.o
> -nouveau-y += core/engine/graph/nvd9.o
> -nouveau-y += core/engine/graph/nve4.o
> -nouveau-y += core/engine/graph/nvf0.o
> -nouveau-y += core/engine/graph/nv108.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/graph/nvc0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/graph/nvc1.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/graph/nvc3.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/graph/nvc8.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/graph/nvd7.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/graph/nvd9.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/graph/nve4.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/graph/nvf0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/graph/nv108.o
> nouveau-y += core/engine/mpeg/nv31.o
> nouveau-y += core/engine/mpeg/nv40.o
> nouveau-y += core/engine/mpeg/nv44.o
> @@ -279,19 +279,19 @@ nouveau-y += core/engine/perfmon/nv40.o
> nouveau-y += core/engine/perfmon/nv50.o
> nouveau-y += core/engine/perfmon/nv84.o
> nouveau-y += core/engine/perfmon/nva3.o
> -nouveau-y += core/engine/perfmon/nvc0.o
> -nouveau-y += core/engine/perfmon/nve0.o
> -nouveau-y += core/engine/perfmon/nvf0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/perfmon/nvc0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/perfmon/nve0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/perfmon/nvf0.o
> nouveau-y += core/engine/ppp/nv98.o
> -nouveau-y += core/engine/ppp/nvc0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/ppp/nvc0.o
> nouveau-y += core/engine/software/nv04.o
> nouveau-y += core/engine/software/nv10.o
> nouveau-y += core/engine/software/nv50.o
> -nouveau-y += core/engine/software/nvc0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/software/nvc0.o
> nouveau-y += core/engine/vp/nv84.o
> nouveau-y += core/engine/vp/nv98.o
> -nouveau-y += core/engine/vp/nvc0.o
> -nouveau-y += core/engine/vp/nve0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/vp/nvc0.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += core/engine/vp/nve0.o
>
> # drm/core
> nouveau-y += nouveau_drm.o nouveau_chan.o nouveau_dma.o nouveau_fence.o
> @@ -299,12 +299,14 @@ nouveau-y += nouveau_vga.o nouveau_agp.o
> nouveau-y += nouveau_ttm.o nouveau_sgdma.o nouveau_bo.o nouveau_gem.o
> nouveau-y += nouveau_prime.o nouveau_abi16.o
> nouveau-y += nv04_fence.o nv10_fence.o nv17_fence.o
> -nouveau-y += nv50_fence.o nv84_fence.o nvc0_fence.o
> +nouveau-y += nv50_fence.o nv84_fence.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += nvc0_fence.o
>
> # drm/kms
> nouveau-y += nouveau_bios.o nouveau_fbcon.o nouveau_display.o
> nouveau-y += nouveau_connector.o nouveau_dp.o
> -nouveau-y += nv04_fbcon.o nv50_fbcon.o nvc0_fbcon.o
> +nouveau-y += nv04_fbcon.o nv50_fbcon.o
> +nouveau-$(CONFIG_DRM_NOUVEAU_NVC0) += nvc0_fbcon.o
>
> # drm/kms/nv04:nv50
> include $(src)/dispnv04/Makefile
> @@ -323,4 +325,4 @@ endif
> nouveau-$(CONFIG_DRM_NOUVEAU_BACKLIGHT) += nouveau_backlight.o
> nouveau-$(CONFIG_DEBUG_FS) += nouveau_debugfs.o
>
> -obj-$(CONFIG_DRM_NOUVEAU)+= nouveau.o
> +obj-$(CONFIG_DRM_NOUVEAU) += nouveau.o
> diff --git a/drivers/gpu/drm/nouveau/core/engine/device/base.c b/drivers/gpu/drm/nouveau/core/engine/device/base.c
> index dd01c6c..c66953b 100644
> --- a/drivers/gpu/drm/nouveau/core/engine/device/base.c
> +++ b/drivers/gpu/drm/nouveau/core/engine/device/base.c
> @@ -205,9 +205,11 @@ nouveau_devobj_ctor(struct nouveau_object *parent,
> case NV_30: ret = nv30_identify(device); break;
> case NV_40: ret = nv40_identify(device); break;
> case NV_50: ret = nv50_identify(device); break;
> +#ifdef CONFIG_DRM_NOUVEAU_NVC0
> case NV_C0:
> case NV_D0: ret = nvc0_identify(device); break;
> case NV_E0: ret = nve0_identify(device); break;
> +#endif
> default:
> ret = -EINVAL;
> break;
> diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
> index 9c9ce4d..875c6a0 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_drm.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
> @@ -138,7 +138,7 @@ nouveau_accel_init(struct nouveau_drm *drm)
> struct nouveau_device *device = nv_device(drm->device);
> struct nouveau_object *object;
> u32 arg0, arg1;
> - int ret;
> + int ret = -ENODEV;
>
> if (nouveau_noaccel || !nouveau_fifo(device) /*XXX*/)
> return;
> @@ -150,7 +150,9 @@ nouveau_accel_init(struct nouveau_drm *drm)
> else if (device->card_type < NV_50) ret = nv17_fence_create(drm);
> else if (device->chipset < 0x84) ret = nv50_fence_create(drm);
> else if (device->card_type < NV_C0) ret = nv84_fence_create(drm);
> +#ifdef CONFIG_DRM_NOUVEAU_NVC0
> else ret = nvc0_fence_create(drm);
> +#endif
> if (ret) {
> NV_ERROR(drm, "failed to initialise sync subsystem, %d\n", ret);
> nouveau_accel_fini(drm);
> diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.h b/drivers/gpu/drm/nouveau/nouveau_fbcon.h
> index fdfc0c9..b4ff8d5 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_fbcon.h
> +++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.h
> @@ -51,10 +51,26 @@ int nv50_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region);
> int nv50_fbcon_imageblit(struct fb_info *info, const struct fb_image *image);
> int nv50_fbcon_accel_init(struct fb_info *info);
>
> +#ifdef CONFIG_DRM_NOUVEAU_NVC0
> int nvc0_fbcon_fillrect(struct fb_info *info, const struct fb_fillrect *rect);
> int nvc0_fbcon_copyarea(struct fb_info *info, const struct fb_copyarea *region);
> int nvc0_fbcon_imageblit(struct fb_info *info, const struct fb_image *image);
> int nvc0_fbcon_accel_init(struct fb_info *info);
> +#else
> +#define _STUB(name, type) \
> +static inline int name(struct fb_info *info, const struct type *t) \
> +{ \
> + return -ENODEV; \
> +}
> +_STUB(nvc0_fbcon_fillrect, fb_fillrect)
> +_STUB(nvc0_fbcon_copyarea, fb_copyarea)
> +_STUB(nvc0_fbcon_imageblit, fb_image)
> +#undef _STUB
> +static inline int nvc0_fbcon_accel_init(struct fb_info *info)
> +{
> + return -ENODEV;
> +}
> +#endif
>
> void nouveau_fbcon_gpu_lockup(struct fb_info *info);
>
> --
> 1.8.3.2
>
More information about the Nouveau
mailing list