Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
0a0dc8f5
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看板
提交
0a0dc8f5
编写于
11月 27, 2013
作者:
B
Ben Skeggs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/nouveau/bios: make common code to handle ramcfg strap etc
Signed-off-by:
N
Ben Skeggs
<
bskeggs@redhat.com
>
上级
59054392
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
86 addition
and
91 deletion
+86
-91
drivers/gpu/drm/nouveau/Makefile
drivers/gpu/drm/nouveau/Makefile
+1
-0
drivers/gpu/drm/nouveau/core/include/subdev/bios/ramcfg.h
drivers/gpu/drm/nouveau/core/include/subdev/bios/ramcfg.h
+9
-0
drivers/gpu/drm/nouveau/core/subdev/bios/init.c
drivers/gpu/drm/nouveau/core/subdev/bios/init.c
+5
-43
drivers/gpu/drm/nouveau/core/subdev/bios/ramcfg.c
drivers/gpu/drm/nouveau/core/subdev/bios/ramcfg.c
+67
-0
drivers/gpu/drm/nouveau/core/subdev/fb/ramnv50.c
drivers/gpu/drm/nouveau/core/subdev/fb/ramnv50.c
+1
-12
drivers/gpu/drm/nouveau/core/subdev/fb/ramnva3.c
drivers/gpu/drm/nouveau/core/subdev/fb/ramnva3.c
+1
-11
drivers/gpu/drm/nouveau/core/subdev/fb/ramnvc0.c
drivers/gpu/drm/nouveau/core/subdev/fb/ramnvc0.c
+1
-13
drivers/gpu/drm/nouveau/core/subdev/fb/ramnve0.c
drivers/gpu/drm/nouveau/core/subdev/fb/ramnve0.c
+1
-12
未找到文件。
drivers/gpu/drm/nouveau/Makefile
浏览文件 @
0a0dc8f5
...
...
@@ -41,6 +41,7 @@ nouveau-y += core/subdev/bios/init.o
nouveau-y
+=
core/subdev/bios/mxm.o
nouveau-y
+=
core/subdev/bios/perf.o
nouveau-y
+=
core/subdev/bios/pll.o
nouveau-y
+=
core/subdev/bios/ramcfg.o
nouveau-y
+=
core/subdev/bios/rammap.o
nouveau-y
+=
core/subdev/bios/timing.o
nouveau-y
+=
core/subdev/bios/therm.o
...
...
drivers/gpu/drm/nouveau/core/include/subdev/bios/ramcfg.h
0 → 100644
浏览文件 @
0a0dc8f5
#ifndef __NVBIOS_RAMCFG_H__
#define __NVBIOS_RAMCFG_H__
struct
nouveau_bios
;
u8
nvbios_ramcfg_count
(
struct
nouveau_bios
*
);
u8
nvbios_ramcfg_index
(
struct
nouveau_bios
*
);
#endif
drivers/gpu/drm/nouveau/core/subdev/bios/init.c
浏览文件 @
0a0dc8f5
...
...
@@ -9,6 +9,7 @@
#include <subdev/bios/dp.h>
#include <subdev/bios/gpio.h>
#include <subdev/bios/init.h>
#include <subdev/bios/ramcfg.h>
#include <subdev/devinit.h>
#include <subdev/i2c.h>
#include <subdev/vga.h>
...
...
@@ -391,43 +392,14 @@ init_unknown_script(struct nouveau_bios *bios)
return
0x0000
;
}
static
u16
init_ram_restrict_table
(
struct
nvbios_init
*
init
)
{
struct
nouveau_bios
*
bios
=
init
->
bios
;
struct
bit_entry
bit_M
;
u16
data
=
0x0000
;
if
(
!
bit_entry
(
bios
,
'M'
,
&
bit_M
))
{
if
(
bit_M
.
version
==
1
&&
bit_M
.
length
>=
5
)
data
=
nv_ro16
(
bios
,
bit_M
.
offset
+
3
);
if
(
bit_M
.
version
==
2
&&
bit_M
.
length
>=
3
)
data
=
nv_ro16
(
bios
,
bit_M
.
offset
+
1
);
}
if
(
data
==
0x0000
)
warn
(
"ram restrict table not found
\n
"
);
return
data
;
}
static
u8
init_ram_restrict_group_count
(
struct
nvbios_init
*
init
)
{
struct
nouveau_bios
*
bios
=
init
->
bios
;
struct
bit_entry
bit_M
;
if
(
!
bit_entry
(
bios
,
'M'
,
&
bit_M
))
{
if
(
bit_M
.
version
==
1
&&
bit_M
.
length
>=
5
)
return
nv_ro08
(
bios
,
bit_M
.
offset
+
2
);
if
(
bit_M
.
version
==
2
&&
bit_M
.
length
>=
3
)
return
nv_ro08
(
bios
,
bit_M
.
offset
+
0
);
}
return
0x00
;
return
nvbios_ramcfg_count
(
init
->
bios
);
}
static
u8
init_ram_restrict
_strap
(
struct
nvbios_init
*
init
)
init_ram_restrict
(
struct
nvbios_init
*
init
)
{
/* This appears to be the behaviour of the VBIOS parser, and *is*
* important to cache the NV_PEXTDEV_BOOT0 on later chipsets to
...
...
@@ -438,18 +410,8 @@ init_ram_restrict_strap(struct nvbios_init *init)
* in case *not* re-reading the strap causes similar breakage.
*/
if
(
!
init
->
ramcfg
||
init
->
bios
->
version
.
major
<
0x70
)
init
->
ramcfg
=
init_rd32
(
init
,
0x101000
);
return
(
init
->
ramcfg
&
0x00000003c
)
>>
2
;
}
static
u8
init_ram_restrict
(
struct
nvbios_init
*
init
)
{
u8
strap
=
init_ram_restrict_strap
(
init
);
u16
table
=
init_ram_restrict_table
(
init
);
if
(
table
)
return
nv_ro08
(
init
->
bios
,
table
+
strap
);
return
0x00
;
init
->
ramcfg
=
0x80000000
|
nvbios_ramcfg_index
(
init
->
bios
);
return
(
init
->
ramcfg
&
0x7fffffff
);
}
static
u8
...
...
drivers/gpu/drm/nouveau/core/subdev/bios/ramcfg.c
0 → 100644
浏览文件 @
0a0dc8f5
/*
* Copyright 2013 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.
*
* Authors: Ben Skeggs <bskeggs@redhat.com>
*/
#include <subdev/bios.h>
#include <subdev/bios/bit.h>
#include <subdev/bios/ramcfg.h>
static
u8
nvbios_ramcfg_strap
(
struct
nouveau_bios
*
bios
)
{
return
(
nv_rd32
(
bios
,
0x101000
)
&
0x0000003c
)
>>
2
;
}
u8
nvbios_ramcfg_count
(
struct
nouveau_bios
*
bios
)
{
struct
bit_entry
bit_M
;
if
(
!
bit_entry
(
bios
,
'M'
,
&
bit_M
))
{
if
(
bit_M
.
version
==
1
&&
bit_M
.
length
>=
5
)
return
nv_ro08
(
bios
,
bit_M
.
offset
+
2
);
if
(
bit_M
.
version
==
2
&&
bit_M
.
length
>=
3
)
return
nv_ro08
(
bios
,
bit_M
.
offset
+
0
);
}
return
0x00
;
}
u8
nvbios_ramcfg_index
(
struct
nouveau_bios
*
bios
)
{
u8
strap
=
nvbios_ramcfg_strap
(
bios
);
u32
xlat
=
0x00000000
;
struct
bit_entry
bit_M
;
if
(
!
bit_entry
(
bios
,
'M'
,
&
bit_M
))
{
if
(
bit_M
.
version
==
1
&&
bit_M
.
length
>=
5
)
xlat
=
nv_ro16
(
bios
,
bit_M
.
offset
+
3
);
if
(
bit_M
.
version
==
2
&&
bit_M
.
length
>=
3
)
xlat
=
nv_ro16
(
bios
,
bit_M
.
offset
+
1
);
}
if
(
xlat
)
strap
=
nv_ro08
(
bios
,
xlat
+
strap
);
return
strap
;
}
drivers/gpu/drm/nouveau/core/subdev/fb/ramnv50.c
浏览文件 @
0a0dc8f5
...
...
@@ -70,13 +70,11 @@ nv50_ram_calc(struct nouveau_fb *pfb, u32 freq)
struct
nv50_ramseq
*
hwsq
=
&
ram
->
hwsq
;
struct
nvbios_perfE
perfE
;
struct
nvbios_pll
mpll
;
struct
bit_entry
M
;
struct
{
u32
data
;
u8
size
;
}
ramcfg
,
timing
;
u8
ver
,
hdr
,
cnt
,
strap
;
u32
data
;
int
N1
,
M1
,
N2
,
M2
,
P
;
int
ret
,
i
;
...
...
@@ -93,16 +91,7 @@ nv50_ram_calc(struct nouveau_fb *pfb, u32 freq)
}
while
(
perfE
.
memory
<
freq
);
/* locate specific data set for the attached memory */
if
(
bit_entry
(
bios
,
'M'
,
&
M
)
||
M
.
version
!=
1
||
M
.
length
<
5
)
{
nv_error
(
pfb
,
"invalid/missing memory table
\n
"
);
return
-
EINVAL
;
}
strap
=
(
nv_rd32
(
pfb
,
0x101000
)
&
0x0000003c
)
>>
2
;
data
=
nv_ro16
(
bios
,
M
.
offset
+
3
);
if
(
data
)
strap
=
nv_ro08
(
bios
,
data
+
strap
);
strap
=
nvbios_ramcfg_index
(
bios
);
if
(
strap
>=
cnt
)
{
nv_error
(
pfb
,
"invalid ramcfg strap
\n
"
);
return
-
EINVAL
;
...
...
drivers/gpu/drm/nouveau/core/subdev/fb/ramnva3.c
浏览文件 @
0a0dc8f5
...
...
@@ -79,7 +79,6 @@ nva3_ram_calc(struct nouveau_fb *pfb, u32 freq)
struct
nva3_ram
*
ram
=
(
void
*
)
pfb
->
ram
;
struct
nva3_ramfuc
*
fuc
=
&
ram
->
fuc
;
struct
nva3_clock_info
mclk
;
struct
bit_entry
M
;
u8
ver
,
cnt
,
strap
;
u32
data
;
struct
{
...
...
@@ -99,16 +98,7 @@ nva3_ram_calc(struct nouveau_fb *pfb, u32 freq)
}
/* locate specific data set for the attached memory */
if
(
bit_entry
(
bios
,
'M'
,
&
M
)
||
M
.
version
!=
2
||
M
.
length
<
3
)
{
nv_error
(
pfb
,
"invalid/missing memory table
\n
"
);
return
-
EINVAL
;
}
strap
=
(
nv_rd32
(
pfb
,
0x101000
)
&
0x0000003c
)
>>
2
;
data
=
nv_ro16
(
bios
,
M
.
offset
+
1
);
if
(
data
)
strap
=
nv_ro08
(
bios
,
data
+
strap
);
strap
=
nvbios_ramcfg_index
(
bios
);
if
(
strap
>=
cnt
)
{
nv_error
(
pfb
,
"invalid ramcfg strap
\n
"
);
return
-
EINVAL
;
...
...
drivers/gpu/drm/nouveau/core/subdev/fb/ramnvc0.c
浏览文件 @
0a0dc8f5
...
...
@@ -23,7 +23,6 @@
*/
#include <subdev/bios.h>
#include <subdev/bios/bit.h>
#include <subdev/bios/pll.h>
#include <subdev/bios/rammap.h>
#include <subdev/bios/timing.h>
...
...
@@ -134,9 +133,7 @@ nvc0_ram_calc(struct nouveau_fb *pfb, u32 freq)
struct
nouveau_bios
*
bios
=
nouveau_bios
(
pfb
);
struct
nvc0_ram
*
ram
=
(
void
*
)
pfb
->
ram
;
struct
nvc0_ramfuc
*
fuc
=
&
ram
->
fuc
;
struct
bit_entry
M
;
u8
ver
,
cnt
,
strap
;
u32
data
;
struct
{
u32
data
;
u8
size
;
...
...
@@ -155,16 +152,7 @@ nvc0_ram_calc(struct nouveau_fb *pfb, u32 freq)
}
/* locate specific data set for the attached memory */
if
(
bit_entry
(
bios
,
'M'
,
&
M
)
||
M
.
version
!=
2
||
M
.
length
<
3
)
{
nv_error
(
pfb
,
"invalid/missing memory table
\n
"
);
return
-
EINVAL
;
}
strap
=
(
nv_rd32
(
pfb
,
0x101000
)
&
0x0000003c
)
>>
2
;
data
=
nv_ro16
(
bios
,
M
.
offset
+
1
);
if
(
data
)
strap
=
nv_ro08
(
bios
,
data
+
strap
);
strap
=
nvbios_ramcfg_index
(
bios
);
if
(
strap
>=
cnt
)
{
nv_error
(
pfb
,
"invalid ramcfg strap
\n
"
);
return
-
EINVAL
;
...
...
drivers/gpu/drm/nouveau/core/subdev/fb/ramnve0.c
浏览文件 @
0a0dc8f5
...
...
@@ -25,7 +25,6 @@
#include <subdev/gpio.h>
#include <subdev/bios.h>
#include <subdev/bios/bit.h>
#include <subdev/bios/pll.h>
#include <subdev/bios/init.h>
#include <subdev/bios/rammap.h>
...
...
@@ -876,7 +875,6 @@ nve0_ram_calc(struct nouveau_fb *pfb, u32 freq)
struct
nouveau_bios
*
bios
=
nouveau_bios
(
pfb
);
struct
nve0_ram
*
ram
=
(
void
*
)
pfb
->
ram
;
struct
nve0_ramfuc
*
fuc
=
&
ram
->
fuc
;
struct
bit_entry
M
;
int
ret
,
refclk
,
strap
,
i
;
u32
data
;
u8
cnt
;
...
...
@@ -893,16 +891,7 @@ nve0_ram_calc(struct nouveau_fb *pfb, u32 freq)
}
/* locate specific data set for the attached memory */
if
(
bit_entry
(
bios
,
'M'
,
&
M
)
||
M
.
version
!=
2
||
M
.
length
<
3
)
{
nv_error
(
pfb
,
"invalid/missing memory table
\n
"
);
return
-
EINVAL
;
}
strap
=
(
nv_rd32
(
pfb
,
0x101000
)
&
0x0000003c
)
>>
2
;
data
=
nv_ro16
(
bios
,
M
.
offset
+
1
);
if
(
data
)
strap
=
nv_ro08
(
bios
,
data
+
strap
);
strap
=
nvbios_ramcfg_index
(
bios
);
if
(
strap
>=
cnt
)
{
nv_error
(
pfb
,
"invalid ramcfg strap
\n
"
);
return
-
EINVAL
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录