Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
7f4f82af
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 4 年多
通知
15
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
7f4f82af
编写于
11月 01, 2017
作者:
B
Ben Skeggs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/nouveau/imem/nv50: allocate memory with nvkm_ram_get()
Signed-off-by:
N
Ben Skeggs
<
bskeggs@redhat.com
>
上级
2bfa0b01
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
14 addition
and
23 deletion
+14
-23
drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.c
drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.c
+14
-23
未找到文件。
drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.c
浏览文件 @
7f4f82af
...
@@ -45,7 +45,7 @@ struct nv50_instmem {
...
@@ -45,7 +45,7 @@ struct nv50_instmem {
struct
nv50_instobj
{
struct
nv50_instobj
{
struct
nvkm_instobj
base
;
struct
nvkm_instobj
base
;
struct
nv50_instmem
*
imem
;
struct
nv50_instmem
*
imem
;
struct
nvkm_mem
*
me
m
;
struct
nvkm_mem
ory
*
ra
m
;
struct
nvkm_vma
bar
;
struct
nvkm_vma
bar
;
refcount_t
maps
;
refcount_t
maps
;
void
*
map
;
void
*
map
;
...
@@ -58,8 +58,8 @@ nv50_instobj_wr32_slow(struct nvkm_memory *memory, u64 offset, u32 data)
...
@@ -58,8 +58,8 @@ nv50_instobj_wr32_slow(struct nvkm_memory *memory, u64 offset, u32 data)
struct
nv50_instobj
*
iobj
=
nv50_instobj
(
memory
);
struct
nv50_instobj
*
iobj
=
nv50_instobj
(
memory
);
struct
nv50_instmem
*
imem
=
iobj
->
imem
;
struct
nv50_instmem
*
imem
=
iobj
->
imem
;
struct
nvkm_device
*
device
=
imem
->
base
.
subdev
.
device
;
struct
nvkm_device
*
device
=
imem
->
base
.
subdev
.
device
;
u64
base
=
(
iobj
->
mem
->
offset
+
offset
)
&
0xffffff00000ULL
;
u64
base
=
(
nvkm_memory_addr
(
iobj
->
ram
)
+
offset
)
&
0xffffff00000ULL
;
u64
addr
=
(
iobj
->
mem
->
offset
+
offset
)
&
0x000000fffffULL
;
u64
addr
=
(
nvkm_memory_addr
(
iobj
->
ram
)
+
offset
)
&
0x000000fffffULL
;
unsigned
long
flags
;
unsigned
long
flags
;
spin_lock_irqsave
(
&
imem
->
base
.
lock
,
flags
);
spin_lock_irqsave
(
&
imem
->
base
.
lock
,
flags
);
...
@@ -77,8 +77,8 @@ nv50_instobj_rd32_slow(struct nvkm_memory *memory, u64 offset)
...
@@ -77,8 +77,8 @@ nv50_instobj_rd32_slow(struct nvkm_memory *memory, u64 offset)
struct
nv50_instobj
*
iobj
=
nv50_instobj
(
memory
);
struct
nv50_instobj
*
iobj
=
nv50_instobj
(
memory
);
struct
nv50_instmem
*
imem
=
iobj
->
imem
;
struct
nv50_instmem
*
imem
=
iobj
->
imem
;
struct
nvkm_device
*
device
=
imem
->
base
.
subdev
.
device
;
struct
nvkm_device
*
device
=
imem
->
base
.
subdev
.
device
;
u64
base
=
(
iobj
->
mem
->
offset
+
offset
)
&
0xffffff00000ULL
;
u64
base
=
(
nvkm_memory_addr
(
iobj
->
ram
)
+
offset
)
&
0xffffff00000ULL
;
u64
addr
=
(
iobj
->
mem
->
offset
+
offset
)
&
0x000000fffffULL
;
u64
addr
=
(
nvkm_memory_addr
(
iobj
->
ram
)
+
offset
)
&
0x000000fffffULL
;
u32
data
;
u32
data
;
unsigned
long
flags
;
unsigned
long
flags
;
...
@@ -183,9 +183,8 @@ static int
...
@@ -183,9 +183,8 @@ static int
nv50_instobj_map
(
struct
nvkm_memory
*
memory
,
u64
offset
,
struct
nvkm_vmm
*
vmm
,
nv50_instobj_map
(
struct
nvkm_memory
*
memory
,
u64
offset
,
struct
nvkm_vmm
*
vmm
,
struct
nvkm_vma
*
vma
,
void
*
argv
,
u32
argc
)
struct
nvkm_vma
*
vma
,
void
*
argv
,
u32
argc
)
{
{
struct
nv50_instobj
*
iobj
=
nv50_instobj
(
memory
);
memory
=
nv50_instobj
(
memory
)
->
ram
;
nvkm_vm_map_at
(
vma
,
offset
,
iobj
->
mem
);
return
nvkm_memory_map
(
memory
,
offset
,
vmm
,
vma
,
argv
,
argc
);
return
0
;
}
}
static
void
static
void
...
@@ -280,19 +279,19 @@ nv50_instobj_boot(struct nvkm_memory *memory, struct nvkm_vmm *vmm)
...
@@ -280,19 +279,19 @@ nv50_instobj_boot(struct nvkm_memory *memory, struct nvkm_vmm *vmm)
static
u64
static
u64
nv50_instobj_size
(
struct
nvkm_memory
*
memory
)
nv50_instobj_size
(
struct
nvkm_memory
*
memory
)
{
{
return
(
u64
)
nv50_instobj
(
memory
)
->
mem
->
size
<<
NVKM_RAM_MM_SHIFT
;
return
nvkm_memory_size
(
nv50_instobj
(
memory
)
->
ram
)
;
}
}
static
u64
static
u64
nv50_instobj_addr
(
struct
nvkm_memory
*
memory
)
nv50_instobj_addr
(
struct
nvkm_memory
*
memory
)
{
{
return
nv
50_instobj
(
memory
)
->
mem
->
offset
;
return
nv
km_memory_addr
(
nv50_instobj
(
memory
)
->
ram
)
;
}
}
static
enum
nvkm_memory_target
static
enum
nvkm_memory_target
nv50_instobj_target
(
struct
nvkm_memory
*
memory
)
nv50_instobj_target
(
struct
nvkm_memory
*
memory
)
{
{
return
NVKM_MEM_TARGET_VRAM
;
return
nvkm_memory_target
(
nv50_instobj
(
memory
)
->
ram
)
;
}
}
static
void
*
static
void
*
...
@@ -300,7 +299,6 @@ nv50_instobj_dtor(struct nvkm_memory *memory)
...
@@ -300,7 +299,6 @@ nv50_instobj_dtor(struct nvkm_memory *memory)
{
{
struct
nv50_instobj
*
iobj
=
nv50_instobj
(
memory
);
struct
nv50_instobj
*
iobj
=
nv50_instobj
(
memory
);
struct
nvkm_instmem
*
imem
=
&
iobj
->
imem
->
base
;
struct
nvkm_instmem
*
imem
=
&
iobj
->
imem
->
base
;
struct
nvkm_ram
*
ram
=
imem
->
subdev
.
device
->
fb
->
ram
;
struct
nvkm_vma
bar
;
struct
nvkm_vma
bar
;
void
*
map
=
map
;
void
*
map
=
map
;
...
@@ -316,7 +314,7 @@ nv50_instobj_dtor(struct nvkm_memory *memory)
...
@@ -316,7 +314,7 @@ nv50_instobj_dtor(struct nvkm_memory *memory)
nvkm_vm_put
(
&
bar
);
nvkm_vm_put
(
&
bar
);
}
}
ram
->
func
->
put
(
ram
,
&
iobj
->
me
m
);
nvkm_memory_unref
(
&
iobj
->
ra
m
);
nvkm_instobj_dtor
(
imem
,
&
iobj
->
base
);
nvkm_instobj_dtor
(
imem
,
&
iobj
->
base
);
return
iobj
;
return
iobj
;
}
}
...
@@ -339,8 +337,8 @@ nv50_instobj_new(struct nvkm_instmem *base, u32 size, u32 align, bool zero,
...
@@ -339,8 +337,8 @@ nv50_instobj_new(struct nvkm_instmem *base, u32 size, u32 align, bool zero,
{
{
struct
nv50_instmem
*
imem
=
nv50_instmem
(
base
);
struct
nv50_instmem
*
imem
=
nv50_instmem
(
base
);
struct
nv50_instobj
*
iobj
;
struct
nv50_instobj
*
iobj
;
struct
nvkm_
ram
*
ram
=
imem
->
base
.
subdev
.
device
->
fb
->
ram
;
struct
nvkm_
device
*
device
=
imem
->
base
.
subdev
.
device
;
int
ret
;
u8
page
=
max
(
order_base_2
(
align
),
12
)
;
if
(
!
(
iobj
=
kzalloc
(
sizeof
(
*
iobj
),
GFP_KERNEL
)))
if
(
!
(
iobj
=
kzalloc
(
sizeof
(
*
iobj
),
GFP_KERNEL
)))
return
-
ENOMEM
;
return
-
ENOMEM
;
...
@@ -351,14 +349,7 @@ nv50_instobj_new(struct nvkm_instmem *base, u32 size, u32 align, bool zero,
...
@@ -351,14 +349,7 @@ nv50_instobj_new(struct nvkm_instmem *base, u32 size, u32 align, bool zero,
refcount_set
(
&
iobj
->
maps
,
0
);
refcount_set
(
&
iobj
->
maps
,
0
);
INIT_LIST_HEAD
(
&
iobj
->
lru
);
INIT_LIST_HEAD
(
&
iobj
->
lru
);
size
=
max
((
size
+
4095
)
&
~
4095
,
(
u32
)
4096
);
return
nvkm_ram_get
(
device
,
0
,
1
,
page
,
size
,
true
,
true
,
&
iobj
->
ram
);
align
=
max
((
align
+
4095
)
&
~
4095
,
(
u32
)
4096
);
ret
=
ram
->
func
->
get
(
ram
,
size
,
align
,
0
,
0x800
,
&
iobj
->
mem
);
if
(
ret
)
return
ret
;
return
0
;
}
}
/******************************************************************************
/******************************************************************************
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录