Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
aa650096
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
aa650096
编写于
6月 24, 2011
作者:
B
Ben Skeggs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/nvc0/vram: support non-uniform memory size per controller
Signed-off-by:
N
Ben Skeggs
<
bskeggs@redhat.com
>
上级
3c23a7b8
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
43 addition
and
5 deletion
+43
-5
drivers/gpu/drm/nouveau/nvc0_vram.c
drivers/gpu/drm/nouveau/nvc0_vram.c
+43
-5
未找到文件。
drivers/gpu/drm/nouveau/nvc0_vram.c
浏览文件 @
aa650096
...
...
@@ -106,12 +106,50 @@ nvc0_vram_init(struct drm_device *dev)
struct
nouveau_vram_engine
*
vram
=
&
dev_priv
->
engine
.
vram
;
const
u32
rsvd_head
=
(
256
*
1024
)
>>
12
;
/* vga memory */
const
u32
rsvd_tail
=
(
1024
*
1024
)
>>
12
;
/* vbios etc */
u32
length
;
u32
parts
=
nv_rd32
(
dev
,
0x121c74
);
u32
bsize
=
nv_rd32
(
dev
,
0x10f20c
);
u32
offset
,
length
;
bool
uniform
=
true
;
int
ret
,
i
;
dev_priv
->
vram_size
=
nv_rd32
(
dev
,
0x10f20c
)
<<
20
;
dev_priv
->
vram_size
*=
nv_rd32
(
dev
,
0x121c74
);
NV_DEBUG
(
dev
,
"0x100800: 0x%08x
\n
"
,
nv_rd32
(
dev
,
0x100800
))
;
NV_DEBUG
(
dev
,
"parts 0x%08x bcast_mem_amount 0x%08x
\n
"
,
parts
,
bsize
);
length
=
(
dev_priv
->
vram_size
>>
12
)
-
rsvd_head
-
rsvd_tail
;
/* read amount of vram attached to each memory controller */
for
(
i
=
0
;
i
<
parts
;
i
++
)
{
u32
psize
=
nv_rd32
(
dev
,
0x11020c
+
(
i
*
0x1000
));
if
(
psize
!=
bsize
)
{
if
(
psize
<
bsize
)
bsize
=
psize
;
uniform
=
false
;
}
NV_DEBUG
(
dev
,
"%d: mem_amount 0x%08x
\n
"
,
i
,
psize
);
dev_priv
->
vram_size
+=
(
u64
)
psize
<<
20
;
}
/* if all controllers have the same amount attached, there's no holes */
if
(
uniform
)
{
offset
=
rsvd_head
;
length
=
(
dev_priv
->
vram_size
>>
12
)
-
rsvd_head
-
rsvd_tail
;
return
nouveau_mm_init
(
&
vram
->
mm
,
offset
,
length
,
1
);
}
return
nouveau_mm_init
(
&
vram
->
mm
,
rsvd_head
,
length
,
1
);
/* otherwise, address lowest common amount from 0GiB */
ret
=
nouveau_mm_init
(
&
vram
->
mm
,
rsvd_head
,
(
bsize
<<
8
)
*
parts
,
1
);
if
(
ret
)
return
ret
;
/* and the rest starting from (8GiB + common_size) */
offset
=
(
0x0200000000ULL
>>
12
)
+
(
bsize
<<
8
);
length
=
(
dev_priv
->
vram_size
>>
12
)
-
(
bsize
<<
8
)
-
rsvd_tail
;
ret
=
nouveau_mm_init
(
&
vram
->
mm
,
offset
,
length
,
0
);
if
(
ret
)
{
nouveau_mm_fini
(
&
vram
->
mm
);
return
ret
;
}
return
0
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录