Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8f27c543 authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/vdec: implement stub modules for the known engines



Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 771e1035
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -19,9 +19,12 @@ nouveau-y := nouveau_drv.o nouveau_state.o nouveau_channel.o nouveau_mem.o \
             nv04_graph.o nv10_graph.o nv20_graph.o \
             nv40_graph.o nv50_graph.o nvc0_graph.o \
             nv40_grctx.o nv50_grctx.o nvc0_grctx.o \
             nv84_crypt.o \
             nv84_crypt.o nv98_crypt.o \
             nva3_copy.o nvc0_copy.o \
             nv31_mpeg.o nv50_mpeg.o \
             nv84_bsp.o \
             nv84_vp.o \
             nv98_ppp.o \
             nv04_instmem.o nv50_instmem.o nvc0_instmem.o \
             nv04_dac.o nv04_dfp.o nv04_tv.o nv17_tv.o nv17_tv_modes.o \
             nv04_crtc.o nv04_display.o nv04_cursor.o \
+17 −0
Original line number Diff line number Diff line
@@ -163,6 +163,9 @@ enum nouveau_flags {
#define NVOBJ_ENGINE_COPY0	3
#define NVOBJ_ENGINE_COPY1	4
#define NVOBJ_ENGINE_MPEG	5
#define NVOBJ_ENGINE_PPP	NVOBJ_ENGINE_MPEG
#define NVOBJ_ENGINE_BSP	6
#define NVOBJ_ENGINE_VP		7
#define NVOBJ_ENGINE_DISPLAY	15
#define NVOBJ_ENGINE_NR		16

@@ -1226,6 +1229,9 @@ extern int nvc0_graph_isr_chid(struct drm_device *dev, u64 inst);
/* nv84_crypt.c */
extern int  nv84_crypt_create(struct drm_device *);

/* nv98_crypt.c */
extern int  nv98_crypt_create(struct drm_device *dev);

/* nva3_copy.c */
extern int  nva3_copy_create(struct drm_device *dev);

@@ -1238,6 +1244,17 @@ extern int nv31_mpeg_create(struct drm_device *dev);
/* nv50_mpeg.c */
extern int  nv50_mpeg_create(struct drm_device *dev);

/* nv84_bsp.c */
/* nv98_bsp.c */
extern int  nv84_bsp_create(struct drm_device *dev);

/* nv84_vp.c */
/* nv98_vp.c */
extern int  nv84_vp_create(struct drm_device *dev);

/* nv98_ppp.c */
extern int  nv98_ppp_create(struct drm_device *dev);

/* nv04_instmem.c */
extern int  nv04_instmem_init(struct drm_device *);
extern void nv04_instmem_takedown(struct drm_device *);
+20 −5
Original line number Diff line number Diff line
@@ -679,6 +679,11 @@ nouveau_card_init(struct drm_device *dev)
		case 0xa0:
			nv84_crypt_create(dev);
			break;
		case 0x98:
		case 0xaa:
		case 0xac:
			nv98_crypt_create(dev);
			break;
		}

		switch (dev_priv->card_type) {
@@ -700,15 +705,25 @@ nouveau_card_init(struct drm_device *dev)
			break;
		}

		if (dev_priv->chipset >= 0xa3 || dev_priv->chipset == 0x98) {
			nv84_bsp_create(dev);
			nv84_vp_create(dev);
			nv98_ppp_create(dev);
		} else
		if (dev_priv->chipset >= 0x84) {
			nv50_mpeg_create(dev);
			nv84_bsp_create(dev);
			nv84_vp_create(dev);
		} else
		if (dev_priv->chipset >= 0x50) {
			nv50_mpeg_create(dev);
		} else
		if (dev_priv->card_type == NV_40 ||
		    dev_priv->chipset == 0x31 ||
		    dev_priv->chipset == 0x34 ||
		    dev_priv->chipset == 0x36)
		    dev_priv->chipset == 0x36) {
			nv31_mpeg_create(dev);
		else
		if (dev_priv->card_type == NV_50 &&
		    (dev_priv->chipset < 0x98 || dev_priv->chipset == 0xa0))
			nv50_mpeg_create(dev);
		}

		for (e = 0; e < NVOBJ_ENGINE_NR; e++) {
			if (dev_priv->eng[e]) {
+83 −0
Original line number Diff line number Diff line
/*
 * Copyright 2011 Red Hat Inc.
 *
 * 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 COPYRIGHT HOLDER(S) OR AUTHOR(S) 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.
 *
 * Authors: Ben Skeggs
 */

#include "drmP.h"
#include "nouveau_drv.h"
#include "nouveau_util.h"
#include "nouveau_vm.h"
#include "nouveau_ramht.h"

/*XXX: This stub is currently used on NV98+ also, as soon as this becomes
 *     more than just an enable/disable stub this needs to be split out to
 *     nv98_bsp.c...
 */

struct nv84_bsp_engine {
	struct nouveau_exec_engine base;
};

static int
nv84_bsp_fini(struct drm_device *dev, int engine, bool suspend)
{
	if (!(nv_rd32(dev, 0x000200) & 0x00008000))
		return 0;

	nv_mask(dev, 0x000200, 0x00008000, 0x00000000);
	return 0;
}

static int
nv84_bsp_init(struct drm_device *dev, int engine)
{
	nv_mask(dev, 0x000200, 0x00008000, 0x00000000);
	nv_mask(dev, 0x000200, 0x00008000, 0x00008000);
	return 0;
}

static void
nv84_bsp_destroy(struct drm_device *dev, int engine)
{
	struct nv84_bsp_engine *pbsp = nv_engine(dev, engine);

	NVOBJ_ENGINE_DEL(dev, BSP);

	kfree(pbsp);
}

int
nv84_bsp_create(struct drm_device *dev)
{
	struct nv84_bsp_engine *pbsp;

	pbsp = kzalloc(sizeof(*pbsp), GFP_KERNEL);
	if (!pbsp)
		return -ENOMEM;

	pbsp->base.destroy = nv84_bsp_destroy;
	pbsp->base.init = nv84_bsp_init;
	pbsp->base.fini = nv84_bsp_fini;

	NVOBJ_ENGINE_ADD(dev, BSP, &pbsp->base);
	return 0;
}
+83 −0
Original line number Diff line number Diff line
/*
 * Copyright 2011 Red Hat Inc.
 *
 * 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 COPYRIGHT HOLDER(S) OR AUTHOR(S) 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.
 *
 * Authors: Ben Skeggs
 */

#include "drmP.h"
#include "nouveau_drv.h"
#include "nouveau_util.h"
#include "nouveau_vm.h"
#include "nouveau_ramht.h"

/*XXX: This stub is currently used on NV98+ also, as soon as this becomes
 *     more than just an enable/disable stub this needs to be split out to
 *     nv98_vp.c...
 */

struct nv84_vp_engine {
	struct nouveau_exec_engine base;
};

static int
nv84_vp_fini(struct drm_device *dev, int engine, bool suspend)
{
	if (!(nv_rd32(dev, 0x000200) & 0x00020000))
		return 0;

	nv_mask(dev, 0x000200, 0x00020000, 0x00000000);
	return 0;
}

static int
nv84_vp_init(struct drm_device *dev, int engine)
{
	nv_mask(dev, 0x000200, 0x00020000, 0x00000000);
	nv_mask(dev, 0x000200, 0x00020000, 0x00020000);
	return 0;
}

static void
nv84_vp_destroy(struct drm_device *dev, int engine)
{
	struct nv84_vp_engine *pvp = nv_engine(dev, engine);

	NVOBJ_ENGINE_DEL(dev, VP);

	kfree(pvp);
}

int
nv84_vp_create(struct drm_device *dev)
{
	struct nv84_vp_engine *pvp;

	pvp = kzalloc(sizeof(*pvp), GFP_KERNEL);
	if (!pvp)
		return -ENOMEM;

	pvp->base.destroy = nv84_vp_destroy;
	pvp->base.init = nv84_vp_init;
	pvp->base.fini = nv84_vp_fini;

	NVOBJ_ENGINE_ADD(dev, VP, &pvp->base);
	return 0;
}
Loading