Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
9548258f
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
9548258f
编写于
4月 12, 2011
作者:
B
Ben Skeggs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/nv50: support PMPEG on original nv50
Signed-off-by:
N
Ben Skeggs
<
bskeggs@redhat.com
>
上级
93187450
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
49 addition
and
12 deletion
+49
-12
drivers/gpu/drm/nouveau/nouveau_state.c
drivers/gpu/drm/nouveau/nouveau_state.c
+1
-1
drivers/gpu/drm/nouveau/nv50_mpeg.c
drivers/gpu/drm/nouveau/nv50_mpeg.c
+48
-11
未找到文件。
drivers/gpu/drm/nouveau/nouveau_state.c
浏览文件 @
9548258f
...
...
@@ -620,7 +620,7 @@ nouveau_card_init(struct drm_device *dev)
if
(
dev_priv
->
card_type
==
NV_40
)
nv40_mpeg_create
(
dev
);
else
if
(
dev_priv
->
card_type
==
NV_50
&&
dev_priv
->
chipset
>
0x50
&&
if
(
dev_priv
->
card_type
==
NV_50
&&
(
dev_priv
->
chipset
<
0x98
||
dev_priv
->
chipset
==
0xa0
))
nv50_mpeg_create
(
dev
);
...
...
drivers/gpu/drm/nouveau/nv50_mpeg.c
浏览文件 @
9548258f
...
...
@@ -30,6 +30,19 @@ struct nv50_mpeg_engine {
struct
nouveau_exec_engine
base
;
};
static
inline
u32
CTX_PTR
(
struct
drm_device
*
dev
,
u32
offset
)
{
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
if
(
dev_priv
->
chipset
==
0x50
)
offset
+=
0x0260
;
else
offset
+=
0x0060
;
return
offset
;
}
static
int
nv50_mpeg_context_new
(
struct
nouveau_channel
*
chan
,
int
engine
)
{
...
...
@@ -46,12 +59,12 @@ nv50_mpeg_context_new(struct nouveau_channel *chan, int engine)
if
(
ret
)
return
ret
;
nv_wo32
(
ramin
,
0x60
,
0x80190002
);
nv_wo32
(
ramin
,
0x64
,
ctx
->
vinst
+
ctx
->
size
-
1
);
nv_wo32
(
ramin
,
0x68
,
ctx
->
vinst
);
nv_wo32
(
ramin
,
0x6c
,
0
);
nv_wo32
(
ramin
,
0x70
,
0
);
nv_wo32
(
ramin
,
0x74
,
0x00010000
);
nv_wo32
(
ramin
,
CTX_PTR
(
dev
,
0x00
)
,
0x80190002
);
nv_wo32
(
ramin
,
CTX_PTR
(
dev
,
0x04
)
,
ctx
->
vinst
+
ctx
->
size
-
1
);
nv_wo32
(
ramin
,
CTX_PTR
(
dev
,
0x08
)
,
ctx
->
vinst
);
nv_wo32
(
ramin
,
CTX_PTR
(
dev
,
0x0c
)
,
0
);
nv_wo32
(
ramin
,
CTX_PTR
(
dev
,
0x10
)
,
0
);
nv_wo32
(
ramin
,
CTX_PTR
(
dev
,
0x14
)
,
0x00010000
);
nv_wo32
(
ctx
,
0x70
,
0x00801ec1
);
nv_wo32
(
ctx
,
0x7c
,
0x0000037c
);
...
...
@@ -83,8 +96,8 @@ nv50_mpeg_context_del(struct nouveau_channel *chan, int engine)
nv_mask
(
dev
,
0x00b32c
,
0x00000001
,
0x00000001
);
spin_unlock_irqrestore
(
&
dev_priv
->
context_switch_lock
,
flags
);
for
(
i
=
0x
60
;
i
<=
0x7
4
;
i
+=
4
)
nv_wo32
(
chan
->
ramin
,
i
,
0x00000000
);
for
(
i
=
0x
00
;
i
<=
0x1
4
;
i
+=
4
)
nv_wo32
(
chan
->
ramin
,
CTX_PTR
(
dev
,
i
)
,
0x00000000
);
nouveau_gpuobj_ref
(
NULL
,
&
ctx
);
chan
->
engctx
[
engine
]
=
NULL
;
}
...
...
@@ -182,6 +195,19 @@ nv50_mpeg_isr(struct drm_device *dev)
nv50_fb_vm_trap
(
dev
,
1
);
}
static
void
nv50_vpe_isr
(
struct
drm_device
*
dev
)
{
if
(
nv_rd32
(
dev
,
0x00b100
))
nv50_mpeg_isr
(
dev
);
if
(
nv_rd32
(
dev
,
0x00b800
))
{
u32
stat
=
nv_rd32
(
dev
,
0x00b800
);
NV_INFO
(
dev
,
"PMSRCH: 0x%08x
\n
"
,
stat
);
nv_wr32
(
dev
,
0xb800
,
stat
);
}
}
static
void
nv50_mpeg_destroy
(
struct
drm_device
*
dev
,
int
engine
)
{
...
...
@@ -196,6 +222,7 @@ nv50_mpeg_destroy(struct drm_device *dev, int engine)
int
nv50_mpeg_create
(
struct
drm_device
*
dev
)
{
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
struct
nv50_mpeg_engine
*
pmpeg
;
pmpeg
=
kzalloc
(
sizeof
(
*
pmpeg
),
GFP_KERNEL
);
...
...
@@ -210,10 +237,20 @@ nv50_mpeg_create(struct drm_device *dev)
pmpeg
->
base
.
object_new
=
nv50_mpeg_object_new
;
pmpeg
->
base
.
tlb_flush
=
nv50_mpeg_tlb_flush
;
nouveau_irq_register
(
dev
,
0
,
nv50_mpeg_isr
);
if
(
dev_priv
->
chipset
==
0x50
)
{
nouveau_irq_register
(
dev
,
0
,
nv50_vpe_isr
);
NVOBJ_ENGINE_ADD
(
dev
,
MPEG
,
&
pmpeg
->
base
);
NVOBJ_CLASS
(
dev
,
0x3174
,
MPEG
);
#if 0
NVOBJ_ENGINE_ADD(dev, ME, &pme->base);
NVOBJ_CLASS(dev, 0x4075, ME);
#endif
}
else
{
nouveau_irq_register
(
dev
,
0
,
nv50_mpeg_isr
);
NVOBJ_ENGINE_ADD
(
dev
,
MPEG
,
&
pmpeg
->
base
);
NVOBJ_CLASS
(
dev
,
0x8274
,
MPEG
);
}
NVOBJ_ENGINE_ADD
(
dev
,
MPEG
,
&
pmpeg
->
base
);
NVOBJ_CLASS
(
dev
,
0x8274
,
MPEG
);
return
0
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录