Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
f66c57d9
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看板
提交
f66c57d9
编写于
11月 01, 2017
作者:
B
Ben Skeggs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/nouveau/fifo: initialise vmm with new interfaces
Signed-off-by:
N
Ben Skeggs
<
bskeggs@redhat.com
>
上级
85f7c3a0
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
31 addition
and
57 deletion
+31
-57
drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h
drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h
+1
-1
drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c
drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c
+18
-15
drivers/gpu/drm/nouveau/nvkm/engine/fifo/chang84.c
drivers/gpu/drm/nouveau/nvkm/engine/fifo/chang84.c
+1
-5
drivers/gpu/drm/nouveau/nvkm/engine/fifo/changf100.h
drivers/gpu/drm/nouveau/nvkm/engine/fifo/changf100.h
+0
-2
drivers/gpu/drm/nouveau/nvkm/engine/fifo/changk104.h
drivers/gpu/drm/nouveau/nvkm/engine/fifo/changk104.h
+0
-2
drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv50.c
drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv50.c
+1
-7
drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv50.h
drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv50.h
+0
-1
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogf100.c
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogf100.c
+3
-10
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c
+3
-10
drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c
drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c
+4
-4
未找到文件。
drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h
浏览文件 @
f66c57d9
...
...
@@ -22,7 +22,7 @@ struct nvkm_fifo_chan {
u16
chid
;
struct
nvkm_gpuobj
*
inst
;
struct
nvkm_gpuobj
*
push
;
struct
nvkm_vm
*
v
m
;
struct
nvkm_vm
m
*
vm
m
;
void
__iomem
*
user
;
u64
addr
;
u32
size
;
...
...
drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c
浏览文件 @
f66c57d9
...
...
@@ -27,6 +27,7 @@
#include <core/gpuobj.h>
#include <core/oproxy.h>
#include <subdev/mmu.h>
#include <subdev/mmu/priv.h>
#include <engine/dma.h>
struct
nvkm_fifo_chan_object
{
...
...
@@ -117,8 +118,8 @@ nvkm_fifo_chan_child_del(struct nvkm_oproxy *base)
if
(
chan
->
func
->
engine_dtor
)
chan
->
func
->
engine_dtor
(
chan
,
engine
);
nvkm_object_del
(
&
engn
->
object
);
if
(
chan
->
vm
)
atomic_dec
(
&
chan
->
vm
->
engref
[
engine
->
subdev
.
index
]);
if
(
chan
->
vm
m
)
atomic_dec
(
&
chan
->
vm
m
->
engref
[
engine
->
subdev
.
index
]);
}
}
...
...
@@ -151,8 +152,8 @@ nvkm_fifo_chan_child_new(const struct nvkm_oclass *oclass, void *data, u32 size,
.
engine
=
oclass
->
engine
,
};
if
(
chan
->
vm
)
atomic_inc
(
&
chan
->
vm
->
engref
[
engine
->
subdev
.
index
]);
if
(
chan
->
vm
m
)
atomic_inc
(
&
chan
->
vm
m
->
engref
[
engine
->
subdev
.
index
]);
if
(
engine
->
func
->
fifo
.
cclass
)
{
ret
=
engine
->
func
->
fifo
.
cclass
(
chan
,
&
cclass
,
...
...
@@ -327,7 +328,10 @@ nvkm_fifo_chan_dtor(struct nvkm_object *object)
if
(
chan
->
user
)
iounmap
(
chan
->
user
);
nvkm_vm_ref
(
NULL
,
&
chan
->
vm
,
NULL
);
if
(
chan
->
vmm
)
{
nvkm_vmm_part
(
chan
->
vmm
,
chan
->
inst
->
memory
);
nvkm_vmm_unref
(
&
chan
->
vmm
);
}
nvkm_gpuobj_del
(
&
chan
->
push
);
nvkm_gpuobj_del
(
&
chan
->
inst
);
...
...
@@ -355,7 +359,6 @@ nvkm_fifo_chan_ctor(const struct nvkm_fifo_chan_func *func,
{
struct
nvkm_client
*
client
=
oclass
->
client
;
struct
nvkm_device
*
device
=
fifo
->
engine
.
subdev
.
device
;
struct
nvkm_mmu
*
mmu
=
device
->
mmu
;
struct
nvkm_dmaobj
*
dmaobj
;
unsigned
long
flags
;
int
ret
;
...
...
@@ -384,16 +387,16 @@ nvkm_fifo_chan_ctor(const struct nvkm_fifo_chan_func *func,
}
/* channel address space */
if
(
!
vm
&&
mmu
)
{
if
(
!
client
->
vm
||
client
->
vm
->
mmu
==
mmu
)
{
ret
=
nvkm_vm_ref
(
client
->
vm
,
&
chan
->
vm
,
NULL
);
if
(
ret
)
return
ret
;
}
else
{
if
(
!
device
->
mmu
->
func
->
vmm
.
global
)
{
struct
nvkm_vmm
*
vmm
=
client
->
vm
;
if
(
vmm
->
mmu
!=
device
->
mmu
)
return
-
EINVAL
;
}
}
else
{
return
-
ENOENT
;
ret
=
nvkm_vmm_join
(
vmm
,
chan
->
inst
->
memory
);
if
(
ret
)
return
ret
;
chan
->
vmm
=
nvkm_vmm_ref
(
vmm
);
}
/* allocate channel id */
...
...
drivers/gpu/drm/nouveau/nvkm/engine/fifo/chang84.c
浏览文件 @
f66c57d9
...
...
@@ -277,9 +277,5 @@ g84_fifo_chan_ctor(struct nv50_fifo *fifo, u64 vm, u64 push,
if
(
ret
)
return
ret
;
ret
=
nvkm_ramht_new
(
device
,
0x8000
,
16
,
chan
->
base
.
inst
,
&
chan
->
ramht
);
if
(
ret
)
return
ret
;
return
nvkm_vm_ref
(
chan
->
base
.
vm
,
&
chan
->
vm
,
chan
->
base
.
inst
->
memory
);
return
nvkm_ramht_new
(
device
,
0x8000
,
16
,
chan
->
base
.
inst
,
&
chan
->
ramht
);
}
drivers/gpu/drm/nouveau/nvkm/engine/fifo/changf100.h
浏览文件 @
f66c57d9
...
...
@@ -11,8 +11,6 @@ struct gf100_fifo_chan {
struct
list_head
head
;
bool
killed
;
struct
nvkm_vm
*
vm
;
struct
{
struct
nvkm_gpuobj
*
inst
;
struct
nvkm_vma
vma
;
...
...
drivers/gpu/drm/nouveau/nvkm/engine/fifo/changk104.h
浏览文件 @
f66c57d9
...
...
@@ -12,8 +12,6 @@ struct gk104_fifo_chan {
struct
list_head
head
;
bool
killed
;
struct
nvkm_vm
*
vm
;
struct
{
struct
nvkm_gpuobj
*
inst
;
struct
nvkm_vma
vma
;
...
...
drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv50.c
浏览文件 @
f66c57d9
...
...
@@ -206,8 +206,6 @@ void *
nv50_fifo_chan_dtor
(
struct
nvkm_fifo_chan
*
base
)
{
struct
nv50_fifo_chan
*
chan
=
nv50_fifo_chan
(
base
);
if
(
chan
->
base
.
inst
)
nvkm_vm_ref
(
NULL
,
&
chan
->
vm
,
chan
->
base
.
inst
->
memory
);
nvkm_ramht_del
(
&
chan
->
ramht
);
nvkm_gpuobj_del
(
&
chan
->
pgd
);
nvkm_gpuobj_del
(
&
chan
->
eng
);
...
...
@@ -263,9 +261,5 @@ nv50_fifo_chan_ctor(struct nv50_fifo *fifo, u64 vm, u64 push,
if
(
ret
)
return
ret
;
ret
=
nvkm_ramht_new
(
device
,
0x8000
,
16
,
chan
->
base
.
inst
,
&
chan
->
ramht
);
if
(
ret
)
return
ret
;
return
nvkm_vm_ref
(
chan
->
base
.
vm
,
&
chan
->
vm
,
chan
->
base
.
inst
->
memory
);
return
nvkm_ramht_new
(
device
,
0x8000
,
16
,
chan
->
base
.
inst
,
&
chan
->
ramht
);
}
drivers/gpu/drm/nouveau/nvkm/engine/fifo/channv50.h
浏览文件 @
f66c57d9
...
...
@@ -13,7 +13,6 @@ struct nv50_fifo_chan {
struct
nvkm_gpuobj
*
eng
;
struct
nvkm_gpuobj
*
pgd
;
struct
nvkm_ramht
*
ramht
;
struct
nvkm_vm
*
vm
;
struct
nvkm_gpuobj
*
engn
[
NVKM_SUBDEV_NR
];
};
...
...
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogf100.c
浏览文件 @
f66c57d9
...
...
@@ -150,12 +150,12 @@ gf100_fifo_gpfifo_engine_ctor(struct nvkm_fifo_chan *base,
if
(
ret
)
return
ret
;
ret
=
nvkm_vm_get
(
chan
->
v
m
,
chan
->
engn
[
engn
].
inst
->
size
,
12
,
ret
=
nvkm_vm_get
(
chan
->
base
.
vm
m
,
chan
->
engn
[
engn
].
inst
->
size
,
12
,
NV_MEM_ACCESS_RW
,
&
chan
->
engn
[
engn
].
vma
);
if
(
ret
)
return
ret
;
return
nvkm_memory_map
(
chan
->
engn
[
engn
].
inst
,
0
,
chan
->
v
m
,
return
nvkm_memory_map
(
chan
->
engn
[
engn
].
inst
,
0
,
chan
->
base
.
vm
m
,
&
chan
->
engn
[
engn
].
vma
,
NULL
,
0
);
}
...
...
@@ -199,10 +199,7 @@ gf100_fifo_gpfifo_init(struct nvkm_fifo_chan *base)
static
void
*
gf100_fifo_gpfifo_dtor
(
struct
nvkm_fifo_chan
*
base
)
{
struct
gf100_fifo_chan
*
chan
=
gf100_fifo_chan
(
base
);
if
(
chan
->
base
.
inst
)
nvkm_vm_ref
(
NULL
,
&
chan
->
vm
,
chan
->
base
.
inst
->
memory
);
return
chan
;
return
gf100_fifo_chan
(
base
);
}
static
const
struct
nvkm_fifo_chan_func
...
...
@@ -262,10 +259,6 @@ gf100_fifo_gpfifo_new(struct nvkm_fifo *base, const struct nvkm_oclass *oclass,
args
->
v0
.
chid
=
chan
->
base
.
chid
;
ret
=
nvkm_vm_ref
(
chan
->
base
.
vm
,
&
chan
->
vm
,
chan
->
base
.
inst
->
memory
);
if
(
ret
)
return
ret
;
/* clear channel control registers */
usermem
=
chan
->
base
.
chid
*
0x1000
;
...
...
drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c
浏览文件 @
f66c57d9
...
...
@@ -162,12 +162,12 @@ gk104_fifo_gpfifo_engine_ctor(struct nvkm_fifo_chan *base,
if
(
ret
)
return
ret
;
ret
=
nvkm_vm_get
(
chan
->
v
m
,
chan
->
engn
[
engn
].
inst
->
size
,
12
,
ret
=
nvkm_vm_get
(
chan
->
base
.
vm
m
,
chan
->
engn
[
engn
].
inst
->
size
,
12
,
NV_MEM_ACCESS_RW
,
&
chan
->
engn
[
engn
].
vma
);
if
(
ret
)
return
ret
;
return
nvkm_memory_map
(
chan
->
engn
[
engn
].
inst
,
0
,
chan
->
v
m
,
return
nvkm_memory_map
(
chan
->
engn
[
engn
].
inst
,
0
,
chan
->
base
.
vm
m
,
&
chan
->
engn
[
engn
].
vma
,
NULL
,
0
);
}
...
...
@@ -212,10 +212,7 @@ gk104_fifo_gpfifo_init(struct nvkm_fifo_chan *base)
static
void
*
gk104_fifo_gpfifo_dtor
(
struct
nvkm_fifo_chan
*
base
)
{
struct
gk104_fifo_chan
*
chan
=
gk104_fifo_chan
(
base
);
if
(
chan
->
base
.
inst
)
nvkm_vm_ref
(
NULL
,
&
chan
->
vm
,
chan
->
base
.
inst
->
memory
);
return
chan
;
return
gk104_fifo_chan
(
base
);
}
static
const
struct
nvkm_fifo_chan_func
...
...
@@ -301,10 +298,6 @@ gk104_fifo_gpfifo_new_(const struct gk104_fifo_chan_func *func,
*
chid
=
chan
->
base
.
chid
;
ret
=
nvkm_vm_ref
(
chan
->
base
.
vm
,
&
chan
->
vm
,
chan
->
base
.
inst
->
memory
);
if
(
ret
)
return
ret
;
/* Clear channel control registers. */
usermem
=
chan
->
base
.
chid
*
0x200
;
ilength
=
order_base_2
(
ilength
/
8
);
...
...
drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c
浏览文件 @
f66c57d9
...
...
@@ -398,12 +398,12 @@ gf100_gr_chan_new(struct nvkm_gr *base, struct nvkm_fifo_chan *fifoch,
if
(
ret
)
return
ret
;
ret
=
nvkm_vm_get
(
fifoch
->
vm
,
0x1000
,
12
,
NV_MEM_ACCESS_RW
|
ret
=
nvkm_vm_get
(
fifoch
->
vm
m
,
0x1000
,
12
,
NV_MEM_ACCESS_RW
|
NV_MEM_ACCESS_SYS
,
&
chan
->
mmio_vma
);
if
(
ret
)
return
ret
;
ret
=
nvkm_memory_map
(
chan
->
mmio
,
0
,
fifoch
->
vm
,
ret
=
nvkm_memory_map
(
chan
->
mmio
,
0
,
fifoch
->
vm
m
,
&
chan
->
mmio_vma
,
NULL
,
0
);
if
(
ret
)
return
ret
;
...
...
@@ -416,13 +416,13 @@ gf100_gr_chan_new(struct nvkm_gr *base, struct nvkm_fifo_chan *fifoch,
if
(
ret
)
return
ret
;
ret
=
nvkm_vm_get
(
fifoch
->
vm
,
ret
=
nvkm_vm_get
(
fifoch
->
vm
m
,
nvkm_memory_size
(
chan
->
data
[
i
].
mem
),
12
,
data
->
access
,
&
chan
->
data
[
i
].
vma
);
if
(
ret
)
return
ret
;
ret
=
nvkm_memory_map
(
chan
->
data
[
i
].
mem
,
0
,
fifoch
->
vm
,
ret
=
nvkm_memory_map
(
chan
->
data
[
i
].
mem
,
0
,
fifoch
->
vm
m
,
&
chan
->
data
[
i
].
vma
,
NULL
,
0
);
if
(
ret
)
return
ret
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录