Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
41e5171b
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看板
提交
41e5171b
编写于
3月 11, 2016
作者:
B
Ben Skeggs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/nouveau/fifo/gk104: read device topology information from hw
Signed-off-by:
N
Ben Skeggs
<
bskeggs@redhat.com
>
上级
69aa40e2
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
103 addition
and
5 deletion
+103
-5
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c
+92
-3
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.h
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.h
+10
-1
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c
+1
-1
未找到文件。
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c
浏览文件 @
41e5171b
...
...
@@ -202,7 +202,7 @@ gk104_fifo_intr_sched_ctxsw(struct gk104_fifo *fifo)
u32
engn
;
spin_lock_irqsave
(
&
fifo
->
base
.
lock
,
flags
);
for
(
engn
=
0
;
engn
<
ARRAY_SIZE
(
fifo
->
runlist
)
;
engn
++
)
{
for
(
engn
=
0
;
engn
<
fifo
->
engine_nr
;
engn
++
)
{
u32
stat
=
nvkm_rd32
(
device
,
0x002640
+
(
engn
*
0x08
));
u32
busy
=
(
stat
&
0x80000000
);
u32
next
=
(
stat
&
0x0fff0000
)
>>
16
;
...
...
@@ -666,13 +666,102 @@ gk104_fifo_oneinit(struct nvkm_fifo *base)
struct
nvkm_subdev
*
subdev
=
&
fifo
->
base
.
engine
.
subdev
;
struct
nvkm_device
*
device
=
subdev
->
device
;
int
ret
,
i
;
u32
*
map
;
/* Determine number of PBDMAs by checking valid enable bits. */
nvkm_wr32
(
device
,
0x000204
,
0xffffffff
);
fifo
->
pbdma_nr
=
hweight32
(
nvkm_rd32
(
device
,
0x000204
));
nvkm_debug
(
subdev
,
"%d PBDMA(s)
\n
"
,
fifo
->
pbdma_nr
);
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
fifo
->
runlist
);
i
++
)
{
/* Read PBDMA->runlist(s) mapping from HW. */
if
(
!
(
map
=
kzalloc
(
sizeof
(
*
map
)
*
fifo
->
pbdma_nr
,
GFP_KERNEL
)))
return
-
ENOMEM
;
for
(
i
=
0
;
i
<
fifo
->
pbdma_nr
;
i
++
)
map
[
i
]
=
nvkm_rd32
(
device
,
0x002390
+
(
i
*
0x04
));
/* Read device topology from HW. */
for
(
i
=
0
;
i
<
64
;
i
++
)
{
int
type
=
-
1
,
pbid
=
-
1
,
engidx
=
-
1
;
int
engn
=
-
1
,
runl
=
-
1
,
intr
=
-
1
,
mcen
=
-
1
;
int
fault
=
-
1
,
j
;
u32
data
,
addr
=
0
;
do
{
data
=
nvkm_rd32
(
device
,
0x022700
+
(
i
*
0x04
));
nvkm_trace
(
subdev
,
"%02x: %08x
\n
"
,
i
,
data
);
switch
(
data
&
0x00000003
)
{
case
0x00000000
:
/* NOT_VALID */
continue
;
case
0x00000001
:
/* DATA */
addr
=
(
data
&
0x00fff000
);
fault
=
(
data
&
0x000000f8
)
>>
3
;
break
;
case
0x00000002
:
/* ENUM */
if
(
data
&
0x00000020
)
engn
=
(
data
&
0x3c000000
)
>>
26
;
if
(
data
&
0x00000010
)
runl
=
(
data
&
0x01e00000
)
>>
21
;
if
(
data
&
0x00000008
)
intr
=
(
data
&
0x000f8000
)
>>
15
;
if
(
data
&
0x00000004
)
mcen
=
(
data
&
0x00003e00
)
>>
9
;
break
;
case
0x00000003
:
/* ENGINE_TYPE */
type
=
(
data
&
0x7ffffffc
)
>>
2
;
break
;
}
}
while
((
data
&
0x80000000
)
&&
++
i
<
64
);
if
(
!
data
)
continue
;
/* Determine which PBDMA handles requests for this engine. */
for
(
j
=
0
;
runl
>=
0
&&
j
<
fifo
->
pbdma_nr
;
j
++
)
{
if
(
map
[
j
]
&
(
1
<<
runl
))
{
pbid
=
j
;
break
;
}
}
/* Translate engine type to NVKM engine identifier. */
switch
(
type
)
{
case
0x00000000
:
engidx
=
NVKM_ENGINE_GR
;
break
;
case
0x00000001
:
engidx
=
NVKM_ENGINE_CE0
;
break
;
case
0x00000002
:
engidx
=
NVKM_ENGINE_CE1
;
break
;
case
0x00000003
:
engidx
=
NVKM_ENGINE_CE2
;
break
;
case
0x00000008
:
engidx
=
NVKM_ENGINE_MSPDEC
;
break
;
case
0x00000009
:
engidx
=
NVKM_ENGINE_MSPPP
;
break
;
case
0x0000000a
:
engidx
=
NVKM_ENGINE_MSVLD
;
break
;
case
0x0000000b
:
engidx
=
NVKM_ENGINE_MSENC
;
break
;
case
0x0000000c
:
engidx
=
NVKM_ENGINE_VIC
;
break
;
case
0x0000000d
:
engidx
=
NVKM_ENGINE_SEC
;
break
;
break
;
default:
break
;
}
nvkm_debug
(
subdev
,
"%02x (%8s): engine %2d runlist %2d "
"pbdma %2d intr %2d reset %2d "
"fault %2d addr %06x
\n
"
,
type
,
engidx
<
0
?
NULL
:
nvkm_subdev_name
[
engidx
],
engn
,
runl
,
pbid
,
intr
,
mcen
,
fault
,
addr
);
/* Mark the engine as supported if everything checks out. */
if
(
engn
>=
0
&&
runl
>=
0
)
{
fifo
->
engine
[
engn
].
engine
=
engidx
<
0
?
NULL
:
nvkm_device_engine
(
device
,
engidx
);
fifo
->
engine
[
engn
].
runl
=
runl
;
fifo
->
engine
[
engn
].
pbid
=
pbid
;
fifo
->
engine_nr
=
max
(
fifo
->
engine_nr
,
engn
+
1
);
fifo
->
runlist
[
runl
].
engm
|=
1
<<
engn
;
fifo
->
runlist_nr
=
max
(
fifo
->
runlist_nr
,
runl
+
1
);
}
}
kfree
(
map
);
for
(
i
=
0
;
i
<
fifo
->
runlist_nr
;
i
++
)
{
ret
=
nvkm_memory_new
(
device
,
NVKM_MEM_TARGET_INST
,
0x8000
,
0x1000
,
false
,
&
fifo
->
runlist
[
i
].
mem
[
0
]);
...
...
@@ -742,7 +831,7 @@ gk104_fifo_dtor(struct nvkm_fifo *base)
nvkm_vm_put
(
&
fifo
->
user
.
bar
);
nvkm_memory_del
(
&
fifo
->
user
.
mem
);
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
fifo
->
runlist
)
;
i
++
)
{
for
(
i
=
0
;
i
<
fifo
->
runlist_nr
;
i
++
)
{
nvkm_memory_del
(
&
fifo
->
runlist
[
i
].
mem
[
1
]);
nvkm_memory_del
(
&
fifo
->
runlist
[
i
].
mem
[
0
]);
}
...
...
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.h
浏览文件 @
41e5171b
...
...
@@ -16,12 +16,21 @@ struct gk104_fifo {
int
pbdma_nr
;
struct
{
struct
nvkm_engine
*
engine
;
int
runl
;
int
pbid
;
}
engine
[
16
];
int
engine_nr
;
struct
{
struct
nvkm_memory
*
mem
[
2
];
int
next
;
wait_queue_head_t
wait
;
struct
list_head
chan
;
}
runlist
[
7
];
u32
engm
;
}
runlist
[
16
];
int
runlist_nr
;
struct
{
struct
nvkm_memory
*
mem
;
...
...
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c
浏览文件 @
41e5171b
...
...
@@ -227,7 +227,7 @@ gk104_fifo_gpfifo_new(struct nvkm_fifo *base, const struct nvkm_oclass *oclass,
return
ret
;
/* determine which downstream engines are present */
for
(
i
=
0
,
engines
=
0
;
i
<
ARRAY_SIZE
(
fifo
->
runlist
)
;
i
++
)
{
for
(
i
=
0
,
engines
=
0
;
i
<
fifo
->
runlist_nr
;
i
++
)
{
u64
subdevs
=
gk104_fifo_engine_subdev
(
i
);
if
(
!
nvkm_device_engine
(
device
,
__ffs64
(
subdevs
)))
continue
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录