Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
6fb566b9
cloud-kernel
项目概览
openanolis
/
cloud-kernel
接近 2 年 前同步成功
通知
170
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
6fb566b9
编写于
5月 08, 2018
作者:
B
Ben Skeggs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/nouveau/dma/gv100: initial support
Signed-off-by:
N
Ben Skeggs
<
bskeggs@redhat.com
>
上级
24a7513c
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
159 addition
and
0 deletion
+159
-0
drivers/gpu/drm/nouveau/include/nvkm/engine/dma.h
drivers/gpu/drm/nouveau/include/nvkm/engine/dma.h
+1
-0
drivers/gpu/drm/nouveau/nvkm/engine/device/base.c
drivers/gpu/drm/nouveau/nvkm/engine/device/base.c
+1
-0
drivers/gpu/drm/nouveau/nvkm/engine/dma/Kbuild
drivers/gpu/drm/nouveau/nvkm/engine/dma/Kbuild
+2
-0
drivers/gpu/drm/nouveau/nvkm/engine/dma/gv100.c
drivers/gpu/drm/nouveau/nvkm/engine/dma/gv100.c
+34
-0
drivers/gpu/drm/nouveau/nvkm/engine/dma/user.h
drivers/gpu/drm/nouveau/nvkm/engine/dma/user.h
+2
-0
drivers/gpu/drm/nouveau/nvkm/engine/dma/usergv100.c
drivers/gpu/drm/nouveau/nvkm/engine/dma/usergv100.c
+119
-0
未找到文件。
drivers/gpu/drm/nouveau/include/nvkm/engine/dma.h
浏览文件 @
6fb566b9
...
@@ -27,4 +27,5 @@ int nv04_dma_new(struct nvkm_device *, int, struct nvkm_dma **);
...
@@ -27,4 +27,5 @@ int nv04_dma_new(struct nvkm_device *, int, struct nvkm_dma **);
int
nv50_dma_new
(
struct
nvkm_device
*
,
int
,
struct
nvkm_dma
**
);
int
nv50_dma_new
(
struct
nvkm_device
*
,
int
,
struct
nvkm_dma
**
);
int
gf100_dma_new
(
struct
nvkm_device
*
,
int
,
struct
nvkm_dma
**
);
int
gf100_dma_new
(
struct
nvkm_device
*
,
int
,
struct
nvkm_dma
**
);
int
gf119_dma_new
(
struct
nvkm_device
*
,
int
,
struct
nvkm_dma
**
);
int
gf119_dma_new
(
struct
nvkm_device
*
,
int
,
struct
nvkm_dma
**
);
int
gv100_dma_new
(
struct
nvkm_device
*
,
int
,
struct
nvkm_dma
**
);
#endif
#endif
drivers/gpu/drm/nouveau/nvkm/engine/device/base.c
浏览文件 @
6fb566b9
...
@@ -2416,6 +2416,7 @@ nv140_chipset = {
...
@@ -2416,6 +2416,7 @@ nv140_chipset = {
.
therm
=
gp100_therm_new
,
.
therm
=
gp100_therm_new
,
.
timer
=
gk20a_timer_new
,
.
timer
=
gk20a_timer_new
,
.
top
=
gk104_top_new
,
.
top
=
gk104_top_new
,
.
dma
=
gv100_dma_new
,
};
};
static
int
static
int
...
...
drivers/gpu/drm/nouveau/nvkm/engine/dma/Kbuild
浏览文件 @
6fb566b9
...
@@ -3,9 +3,11 @@ nvkm-y += nvkm/engine/dma/nv04.o
...
@@ -3,9 +3,11 @@ nvkm-y += nvkm/engine/dma/nv04.o
nvkm-y += nvkm/engine/dma/nv50.o
nvkm-y += nvkm/engine/dma/nv50.o
nvkm-y += nvkm/engine/dma/gf100.o
nvkm-y += nvkm/engine/dma/gf100.o
nvkm-y += nvkm/engine/dma/gf119.o
nvkm-y += nvkm/engine/dma/gf119.o
nvkm-y += nvkm/engine/dma/gv100.o
nvkm-y += nvkm/engine/dma/user.o
nvkm-y += nvkm/engine/dma/user.o
nvkm-y += nvkm/engine/dma/usernv04.o
nvkm-y += nvkm/engine/dma/usernv04.o
nvkm-y += nvkm/engine/dma/usernv50.o
nvkm-y += nvkm/engine/dma/usernv50.o
nvkm-y += nvkm/engine/dma/usergf100.o
nvkm-y += nvkm/engine/dma/usergf100.o
nvkm-y += nvkm/engine/dma/usergf119.o
nvkm-y += nvkm/engine/dma/usergf119.o
nvkm-y += nvkm/engine/dma/usergv100.o
drivers/gpu/drm/nouveau/nvkm/engine/dma/gv100.c
0 → 100644
浏览文件 @
6fb566b9
/*
* Copyright 2018 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.
*/
#include "priv.h"
#include "user.h"
static
const
struct
nvkm_dma_func
gv100_dma
=
{
.
class_new
=
gv100_dmaobj_new
,
};
int
gv100_dma_new
(
struct
nvkm_device
*
device
,
int
index
,
struct
nvkm_dma
**
pdma
)
{
return
nvkm_dma_new_
(
&
gv100_dma
,
device
,
index
,
pdma
);
}
drivers/gpu/drm/nouveau/nvkm/engine/dma/user.h
浏览文件 @
6fb566b9
...
@@ -16,4 +16,6 @@ int gf100_dmaobj_new(struct nvkm_dma *, const struct nvkm_oclass *, void *, u32,
...
@@ -16,4 +16,6 @@ int gf100_dmaobj_new(struct nvkm_dma *, const struct nvkm_oclass *, void *, u32,
struct
nvkm_dmaobj
**
);
struct
nvkm_dmaobj
**
);
int
gf119_dmaobj_new
(
struct
nvkm_dma
*
,
const
struct
nvkm_oclass
*
,
void
*
,
u32
,
int
gf119_dmaobj_new
(
struct
nvkm_dma
*
,
const
struct
nvkm_oclass
*
,
void
*
,
u32
,
struct
nvkm_dmaobj
**
);
struct
nvkm_dmaobj
**
);
int
gv100_dmaobj_new
(
struct
nvkm_dma
*
,
const
struct
nvkm_oclass
*
,
void
*
,
u32
,
struct
nvkm_dmaobj
**
);
#endif
#endif
drivers/gpu/drm/nouveau/nvkm/engine/dma/usergv100.c
0 → 100644
浏览文件 @
6fb566b9
/*
* Copyright 2018 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.
*/
#define gv100_dmaobj(p) container_of((p), struct gv100_dmaobj, base)
#include "user.h"
#include <core/client.h>
#include <core/gpuobj.h>
#include <subdev/fb.h>
#include <nvif/cl0002.h>
#include <nvif/unpack.h>
struct
gv100_dmaobj
{
struct
nvkm_dmaobj
base
;
u32
flags0
;
};
static
int
gv100_dmaobj_bind
(
struct
nvkm_dmaobj
*
base
,
struct
nvkm_gpuobj
*
parent
,
int
align
,
struct
nvkm_gpuobj
**
pgpuobj
)
{
struct
gv100_dmaobj
*
dmaobj
=
gv100_dmaobj
(
base
);
struct
nvkm_device
*
device
=
dmaobj
->
base
.
dma
->
engine
.
subdev
.
device
;
u64
start
=
dmaobj
->
base
.
start
>>
8
;
u64
limit
=
dmaobj
->
base
.
limit
>>
8
;
int
ret
;
ret
=
nvkm_gpuobj_new
(
device
,
24
,
align
,
false
,
parent
,
pgpuobj
);
if
(
ret
==
0
)
{
nvkm_kmap
(
*
pgpuobj
);
nvkm_wo32
(
*
pgpuobj
,
0x00
,
dmaobj
->
flags0
);
nvkm_wo32
(
*
pgpuobj
,
0x04
,
lower_32_bits
(
start
));
nvkm_wo32
(
*
pgpuobj
,
0x08
,
upper_32_bits
(
start
));
nvkm_wo32
(
*
pgpuobj
,
0x0c
,
lower_32_bits
(
limit
));
nvkm_wo32
(
*
pgpuobj
,
0x10
,
upper_32_bits
(
limit
));
nvkm_done
(
*
pgpuobj
);
}
return
ret
;
}
static
const
struct
nvkm_dmaobj_func
gv100_dmaobj_func
=
{
.
bind
=
gv100_dmaobj_bind
,
};
int
gv100_dmaobj_new
(
struct
nvkm_dma
*
dma
,
const
struct
nvkm_oclass
*
oclass
,
void
*
data
,
u32
size
,
struct
nvkm_dmaobj
**
pdmaobj
)
{
union
{
struct
gf119_dma_v0
v0
;
}
*
args
;
struct
nvkm_object
*
parent
=
oclass
->
parent
;
struct
gv100_dmaobj
*
dmaobj
;
u32
kind
,
page
;
int
ret
;
if
(
!
(
dmaobj
=
kzalloc
(
sizeof
(
*
dmaobj
),
GFP_KERNEL
)))
return
-
ENOMEM
;
*
pdmaobj
=
&
dmaobj
->
base
;
ret
=
nvkm_dmaobj_ctor
(
&
gv100_dmaobj_func
,
dma
,
oclass
,
&
data
,
&
size
,
&
dmaobj
->
base
);
if
(
ret
)
return
ret
;
ret
=
-
ENOSYS
;
args
=
data
;
nvif_ioctl
(
parent
,
"create gv100 dma size %d
\n
"
,
size
);
if
(
!
(
ret
=
nvif_unpack
(
ret
,
&
data
,
&
size
,
args
->
v0
,
0
,
0
,
false
)))
{
nvif_ioctl
(
parent
,
"create gv100 dma vers %d page %d kind %02x
\n
"
,
args
->
v0
.
version
,
args
->
v0
.
page
,
args
->
v0
.
kind
);
kind
=
args
->
v0
.
kind
!=
0
;
page
=
args
->
v0
.
page
!=
0
;
}
else
if
(
size
==
0
)
{
kind
=
0
;
page
=
GF119_DMA_V0_PAGE_SP
;
}
else
return
ret
;
if
(
kind
)
dmaobj
->
flags0
|=
0x00100000
;
if
(
page
)
dmaobj
->
flags0
|=
0x00000040
;
dmaobj
->
flags0
|=
0x00000004
;
/* rw */
switch
(
dmaobj
->
base
.
target
)
{
case
NV_MEM_TARGET_VRAM
:
dmaobj
->
flags0
|=
0x00000001
;
break
;
case
NV_MEM_TARGET_PCI
:
dmaobj
->
flags0
|=
0x00000002
;
break
;
case
NV_MEM_TARGET_PCI_NOSNOOP
:
dmaobj
->
flags0
|=
0x00000003
;
break
;
default:
return
-
EINVAL
;
}
return
0
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录