提交 c79a191b 编写于 作者: B Ben Skeggs

drm/nouveau/xtensa: convert user classes to new-style nvkm_object

Signed-off-by: NBen Skeggs <bskeggs@redhat.com>
上级 9d498e0f
master alk-4.19.24 alk-4.19.30 alk-4.19.34 alk-4.19.36 alk-4.19.43 alk-4.19.48 alk-4.19.57 ck-4.19.67 ck-4.19.81 ck-4.19.91 github/fork/deepanshu1422/fix-typo-in-comment github/fork/haosdent/fix-typo linux-next v4.19.91 v4.19.90 v4.19.89 v4.19.88 v4.19.87 v4.19.86 v4.19.85 v4.19.84 v4.19.83 v4.19.82 v4.19.81 v4.19.80 v4.19.79 v4.19.78 v4.19.77 v4.19.76 v4.19.75 v4.19.74 v4.19.73 v4.19.72 v4.19.71 v4.19.70 v4.19.69 v4.19.68 v4.19.67 v4.19.66 v4.19.65 v4.19.64 v4.19.63 v4.19.62 v4.19.61 v4.19.60 v4.19.59 v4.19.58 v4.19.57 v4.19.56 v4.19.55 v4.19.54 v4.19.53 v4.19.52 v4.19.51 v4.19.50 v4.19.49 v4.19.48 v4.19.47 v4.19.46 v4.19.45 v4.19.44 v4.19.43 v4.19.42 v4.19.41 v4.19.40 v4.19.39 v4.19.38 v4.19.37 v4.19.36 v4.19.35 v4.19.34 v4.19.33 v4.19.32 v4.19.31 v4.19.30 v4.19.29 v4.19.28 v4.19.27 v4.19.26 v4.19.25 v4.19.24 v4.19.23 v4.19.22 v4.19.21 v4.19.20 v4.19.19 v4.19.18 v4.19.17 v4.19.16 v4.19.15 v4.19.14 v4.19.13 v4.19.12 v4.19.11 v4.19.10 v4.19.9 v4.19.8 v4.19.7 v4.19.6 v4.19.5 v4.19.4 v4.19.3 v4.19.2 v4.19.1 v4.19 v4.19-rc8 v4.19-rc7 v4.19-rc6 v4.19-rc5 v4.19-rc4 v4.19-rc3 v4.19-rc2 v4.19-rc1 ck-release-21 ck-release-20 ck-release-19.2 ck-release-19.1 ck-release-19 ck-release-18 ck-release-17.2 ck-release-17.1 ck-release-17 ck-release-16 ck-release-15.1 ck-release-15 ck-release-14 ck-release-13.2 ck-release-13 ck-release-12 ck-release-11 ck-release-10 ck-release-9 ck-release-7 alk-release-15 alk-release-14 alk-release-13.2 alk-release-13 alk-release-12 alk-release-11 alk-release-10 alk-release-9 alk-release-7
无相关合并请求
......@@ -45,6 +45,8 @@
#define GM107_DISP 0x00009470
#define GM204_DISP 0x00009570
#define NV74_VP2 0x00007476
#define NV50_DISP_CURSOR 0x0000507a
#define G82_DISP_CURSOR 0x0000827a
#define GT214_DISP_CURSOR 0x0000857a
......@@ -94,6 +96,8 @@
#define MAXWELL_A 0x0000b097
#define MAXWELL_B 0x0000b197
#define NV74_BSP 0x000074b0
#define GT212_MSVLD 0x000085b1
#define IGT21A_MSVLD 0x000086b1
#define G98_MSVLD 0x000088b1
......
#ifndef __NVKM_BSP_H__
#define __NVKM_BSP_H__
#include <core/engine.h>
#include <engine/xtensa.h>
extern struct nvkm_oclass g84_bsp_oclass;
#endif
#ifndef __NVKM_VP_H__
#define __NVKM_VP_H__
#include <core/engine.h>
#include <engine/xtensa.h>
extern struct nvkm_oclass g84_vp_oclass;
#endif
#ifndef __NVKM_XTENSA_H__
#define __NVKM_XTENSA_H__
#define nvkm_xtensa(p) container_of((p), struct nvkm_xtensa, engine)
#include <core/engine.h>
struct nvkm_xtensa {
struct nvkm_engine engine;
const struct nvkm_xtensa_func *func;
u32 addr;
struct nvkm_memory *gpu_fw;
......@@ -11,16 +13,15 @@ struct nvkm_xtensa {
u32 unkd28;
};
struct nvkm_xtensa_func {
void (*init)(struct nvkm_xtensa *);
struct nvkm_sclass sclass[];
};
#define nvkm_xtensa_create(p,e,c,b,d,i,f,r) \
nvkm_xtensa_create_((p), (e), (c), (b), (d), (i), (f), \
sizeof(**r),(void **)r)
int _nvkm_xtensa_engctx_ctor(struct nvkm_object *,
struct nvkm_object *,
struct nvkm_oclass *, void *, u32,
struct nvkm_object **);
void _nvkm_xtensa_intr(struct nvkm_subdev *);
int nvkm_xtensa_create_(struct nvkm_object *,
struct nvkm_object *,
struct nvkm_oclass *, u32, bool,
......
......@@ -22,41 +22,17 @@
* Authors: Ben Skeggs, Ilia Mirkin
*/
#include <engine/bsp.h>
#include <engine/xtensa.h>
#include <core/engctx.h>
#include <nvif/class.h>
/*******************************************************************************
* BSP object classes
******************************************************************************/
static struct nvkm_oclass
g84_bsp_sclass[] = {
{ 0x74b0, &nvkm_object_ofuncs },
{},
static const struct nvkm_xtensa_func
g84_bsp_func = {
.sclass = {
{ -1, -1, NV74_BSP },
{}
}
};
/*******************************************************************************
* BSP context
******************************************************************************/
static struct nvkm_oclass
g84_bsp_cclass = {
.handle = NV_ENGCTX(BSP, 0x84),
.ofuncs = &(struct nvkm_ofuncs) {
.ctor = _nvkm_xtensa_engctx_ctor,
.dtor = _nvkm_engctx_dtor,
.init = _nvkm_engctx_init,
.fini = _nvkm_engctx_fini,
.rd32 = _nvkm_engctx_rd32,
.wr32 = _nvkm_engctx_wr32,
},
};
/*******************************************************************************
* BSP engine/subdev functions
******************************************************************************/
static int
g84_bsp_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
struct nvkm_oclass *oclass, void *data, u32 size,
......@@ -71,9 +47,8 @@ g84_bsp_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
if (ret)
return ret;
bsp->func = &g84_bsp_func;
nv_subdev(bsp)->unit = 0x04008000;
nv_engine(bsp)->cclass = &g84_bsp_cclass;
nv_engine(bsp)->sclass = g84_bsp_sclass;
bsp->fifo_val = 0x1111;
bsp->unkd28 = 0x90044;
return 0;
......
......@@ -22,41 +22,17 @@
* Authors: Ben Skeggs, Ilia Mirkin
*/
#include <engine/vp.h>
#include <engine/xtensa.h>
#include <core/engctx.h>
#include <nvif/class.h>
/*******************************************************************************
* VP object classes
******************************************************************************/
static struct nvkm_oclass
g84_vp_sclass[] = {
{ 0x7476, &nvkm_object_ofuncs },
{},
static const struct nvkm_xtensa_func
g84_vp_func = {
.sclass = {
{ -1, -1, NV74_VP2 },
{}
}
};
/*******************************************************************************
* PVP context
******************************************************************************/
static struct nvkm_oclass
g84_vp_cclass = {
.handle = NV_ENGCTX(VP, 0x84),
.ofuncs = &(struct nvkm_ofuncs) {
.ctor = _nvkm_xtensa_engctx_ctor,
.dtor = _nvkm_engctx_dtor,
.init = _nvkm_engctx_init,
.fini = _nvkm_engctx_fini,
.rd32 = _nvkm_engctx_rd32,
.wr32 = _nvkm_engctx_wr32,
},
};
/*******************************************************************************
* PVP engine/subdev functions
******************************************************************************/
static int
g84_vp_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
struct nvkm_oclass *oclass, void *data, u32 size,
......@@ -71,9 +47,8 @@ g84_vp_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
if (ret)
return ret;
vp->func = &g84_vp_func;
nv_subdev(vp)->unit = 0x01020000;
nv_engine(vp)->cclass = &g84_vp_cclass;
nv_engine(vp)->sclass = g84_vp_sclass;
vp->fifo_val = 0x111;
vp->unkd28 = 0x9c544;
return 0;
......
......@@ -20,23 +20,37 @@
* OTHER DEALINGS IN THE SOFTWARE.
*/
#include <engine/xtensa.h>
#include <engine/fifo.h>
#include <core/engctx.h>
int
_nvkm_xtensa_engctx_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
struct nvkm_oclass *oclass, void *data, u32 size,
struct nvkm_object **pobject)
static int
nvkm_xtensa_oclass_get(struct nvkm_oclass *oclass, int index)
{
struct nvkm_engctx *engctx;
int ret;
struct nvkm_xtensa *xtensa = nvkm_xtensa(oclass->engine);
int c = 0;
while (xtensa->func->sclass[c].oclass) {
if (c++ == index) {
oclass->base = xtensa->func->sclass[index];
return index;
}
}
ret = nvkm_engctx_create(parent, engine, oclass, NULL, 0x10000, 0x1000,
NVOBJ_FLAG_ZERO_ALLOC, &engctx);
*pobject = nv_object(engctx);
return ret;
return c;
}
static int
nvkm_xtensa_cclass_bind(struct nvkm_object *object, struct nvkm_gpuobj *parent,
int align, struct nvkm_gpuobj **pgpuobj)
{
return nvkm_gpuobj_new(object->engine->subdev.device, 0x10000, align,
true, parent, pgpuobj);
}
static const struct nvkm_object_func
nvkm_xtensa_cclass = {
.bind = nvkm_xtensa_cclass_bind,
};
void
_nvkm_xtensa_intr(struct nvkm_subdev *subdev)
{
......@@ -58,6 +72,12 @@ _nvkm_xtensa_intr(struct nvkm_subdev *subdev)
}
}
static const struct nvkm_engine_func
nvkm_xtensa = {
.fifo.sclass = nvkm_xtensa_oclass_get,
.cclass = &nvkm_xtensa_cclass,
};
int
nvkm_xtensa_create_(struct nvkm_object *parent, struct nvkm_object *engine,
struct nvkm_oclass *oclass, u32 addr, bool enable,
......@@ -73,7 +93,8 @@ nvkm_xtensa_create_(struct nvkm_object *parent, struct nvkm_object *engine,
if (ret)
return ret;
nv_subdev(xtensa)->intr = _nvkm_xtensa_intr;
xtensa->engine.subdev.intr = _nvkm_xtensa_intr;
xtensa->engine.func = &nvkm_xtensa;
xtensa->addr = addr;
return 0;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册
反馈
建议
客服 返回
顶部