Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
3ecd329b
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看板
提交
3ecd329b
编写于
8月 20, 2015
作者:
B
Ben Skeggs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/nouveau/fb: switch to subdev printk macros
Signed-off-by:
N
Ben Skeggs
<
bskeggs@redhat.com
>
上级
aa860e4b
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
116 addition
and
112 deletion
+116
-112
drivers/gpu/drm/nouveau/nvkm/subdev/fb/base.c
drivers/gpu/drm/nouveau/nvkm/subdev/fb/base.c
+10
-8
drivers/gpu/drm/nouveau/nvkm/subdev/fb/gf100.c
drivers/gpu/drm/nouveau/nvkm/subdev/fb/gf100.c
+2
-3
drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv50.c
drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv50.c
+18
-34
drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgf100.c
drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgf100.c
+21
-16
drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgk104.c
drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgk104.c
+13
-10
drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgt215.c
drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgt215.c
+25
-20
drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv1a.c
drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv1a.c
+1
-1
drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv40.c
drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv40.c
+3
-2
drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv50.c
drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv50.c
+23
-18
未找到文件。
drivers/gpu/drm/nouveau/nvkm/subdev/fb/base.c
浏览文件 @
3ecd329b
...
...
@@ -29,7 +29,8 @@
int
nvkm_fb_bios_memtype
(
struct
nvkm_bios
*
bios
)
{
struct
nvkm_device
*
device
=
bios
->
subdev
.
device
;
struct
nvkm_subdev
*
subdev
=
&
bios
->
subdev
;
struct
nvkm_device
*
device
=
subdev
->
device
;
const
u8
ramcfg
=
(
nvkm_rd32
(
device
,
0x101000
)
&
0x0000003c
)
>>
2
;
struct
nvbios_M0203E
M0203E
;
u8
ver
,
hdr
;
...
...
@@ -41,12 +42,12 @@ nvkm_fb_bios_memtype(struct nvkm_bios *bios)
case
M0203E_TYPE_GDDR3
:
return
NV_MEM_TYPE_GDDR3
;
case
M0203E_TYPE_GDDR5
:
return
NV_MEM_TYPE_GDDR5
;
default:
nv
_warn
(
bios
,
"M0203E type %02x
\n
"
,
M0203E
.
type
);
nv
km_warn
(
subdev
,
"M0203E type %02x
\n
"
,
M0203E
.
type
);
return
NV_MEM_TYPE_UNKNOWN
;
}
}
nv
_warn
(
bios
,
"M0203E not matched!
\n
"
);
nv
km_warn
(
subdev
,
"M0203E not matched!
\n
"
);
return
NV_MEM_TYPE_UNKNOWN
;
}
...
...
@@ -111,7 +112,7 @@ nvkm_fb_create_(struct nvkm_object *parent, struct nvkm_object *engine,
{
struct
nvkm_fb_impl
*
impl
=
(
void
*
)
oclass
;
static
const
char
*
name
[]
=
{
[
NV_MEM_TYPE_UNKNOWN
]
=
"
unknown
"
,
[
NV_MEM_TYPE_UNKNOWN
]
=
"
of unknown memory type
"
,
[
NV_MEM_TYPE_STOLEN
]
=
"stolen system memory"
,
[
NV_MEM_TYPE_SGRAM
]
=
"SGRAM"
,
[
NV_MEM_TYPE_SDRAM
]
=
"SDRAM"
,
...
...
@@ -140,7 +141,7 @@ nvkm_fb_create_(struct nvkm_object *parent, struct nvkm_object *engine,
ret
=
nvkm_object_ctor
(
nv_object
(
fb
),
NULL
,
impl
->
ram
,
NULL
,
0
,
&
ram
);
if
(
ret
)
{
nv
_fatal
(
fb
,
"error detecting memory configuration!!
\n
"
);
nv
km_error
(
&
fb
->
subdev
,
"vram init failed, %d
\n
"
,
ret
);
return
ret
;
}
...
...
@@ -157,10 +158,11 @@ nvkm_fb_create_(struct nvkm_object *parent, struct nvkm_object *engine,
++
fb
->
ram
->
tags
:
0
,
1
);
if
(
ret
)
return
ret
;
nvkm_debug
(
&
fb
->
subdev
,
"%d compression tags
\n
"
,
fb
->
ram
->
tags
);
}
nv_info
(
fb
,
"RAM type: %s
\n
"
,
name
[
fb
->
ram
->
type
]);
nv_info
(
fb
,
"RAM size: %d MiB
\n
"
,
(
int
)(
fb
->
ram
->
size
>>
20
));
nv_info
(
fb
,
" ZCOMP: %d tags
\n
"
,
fb
->
ram
->
tags
);
nvkm_info
(
&
fb
->
subdev
,
"%d MiB %s
\n
"
,
(
int
)(
fb
->
ram
->
size
>>
20
),
name
[
fb
->
ram
->
type
]);
return
0
;
}
drivers/gpu/drm/nouveau/nvkm/subdev/fb/gf100.c
浏览文件 @
3ecd329b
...
...
@@ -36,12 +36,11 @@ static void
gf100_fb_intr
(
struct
nvkm_subdev
*
subdev
)
{
struct
nvkm_device
*
device
=
subdev
->
device
;
struct
gf100_fb
*
fb
=
(
void
*
)
subdev
;
u32
intr
=
nvkm_rd32
(
device
,
0x000100
);
if
(
intr
&
0x08000000
)
nv
_debug
(
fb
,
"PFFB intr
\n
"
);
nv
km_debug
(
subdev
,
"PFFB intr
\n
"
);
if
(
intr
&
0x00002000
)
nv
_debug
(
fb
,
"PBFB intr
\n
"
);
nv
km_debug
(
subdev
,
"PBFB intr
\n
"
);
}
int
...
...
drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv50.c
浏览文件 @
3ecd329b
...
...
@@ -144,10 +144,10 @@ static const struct nvkm_enum vm_fault[] = {
static
void
nv50_fb_intr
(
struct
nvkm_subdev
*
subdev
)
{
struct
nvkm_device
*
device
=
nv_device
(
subdev
);
struct
nvkm_engine
*
engine
;
struct
nv50_fb
*
fb
=
(
void
*
)
subdev
;
const
struct
nvkm_enum
*
en
,
*
cl
;
struct
nvkm_device
*
device
=
fb
->
base
.
subdev
.
device
;
struct
nvkm_engine
*
engine
;
const
struct
nvkm_enum
*
en
,
*
re
,
*
cl
,
*
sc
;
struct
nvkm_object
*
engctx
=
NULL
;
u32
trap
[
6
],
idx
,
chan
;
u8
st0
,
st1
,
st2
,
st3
;
...
...
@@ -203,38 +203,22 @@ nv50_fb_intr(struct nvkm_subdev *subdev)
en
=
orig_en
;
}
nv_error
(
fb
,
"trapped %s at 0x%02x%04x%04x on channel 0x%08x [%s] "
,
(
trap
[
5
]
&
0x00000100
)
?
"read"
:
"write"
,
trap
[
5
]
&
0xff
,
trap
[
4
]
&
0xffff
,
trap
[
3
]
&
0xffff
,
chan
,
nvkm_client_name
(
engctx
));
re
=
nvkm_enum_find
(
vm_fault
,
st1
);
cl
=
nvkm_enum_find
(
vm_client
,
st2
);
if
(
cl
&&
cl
->
data
)
sc
=
nvkm_enum_find
(
cl
->
data
,
st3
);
else
if
(
en
&&
en
->
data
)
sc
=
nvkm_enum_find
(
en
->
data
,
st3
);
else
sc
=
NULL
;
nvkm_error
(
subdev
,
"trapped %s at %02x%04x%04x on channel "
"%08x [%s] engine %02x [%s] client %02x [%s] "
"subclient %02x [%s] reason %08x [%s]
\n
"
,
(
trap
[
5
]
&
0x00000100
)
?
"read"
:
"write"
,
trap
[
5
]
&
0xff
,
trap
[
4
]
&
0xffff
,
trap
[
3
]
&
0xffff
,
chan
,
nvkm_client_name
(
engctx
),
st0
,
en
?
en
->
name
:
""
,
st2
,
cl
?
cl
->
name
:
""
,
st3
,
sc
?
sc
->
name
:
""
,
st1
,
re
?
re
->
name
:
""
);
nvkm_engctx_put
(
engctx
);
if
(
en
)
pr_cont
(
"%s/"
,
en
->
name
);
else
pr_cont
(
"%02x/"
,
st0
);
cl
=
nvkm_enum_find
(
vm_client
,
st2
);
if
(
cl
)
pr_cont
(
"%s/"
,
cl
->
name
);
else
pr_cont
(
"%02x/"
,
st2
);
if
(
cl
&&
cl
->
data
)
cl
=
nvkm_enum_find
(
cl
->
data
,
st3
);
else
if
(
en
&&
en
->
data
)
cl
=
nvkm_enum_find
(
en
->
data
,
st3
);
else
cl
=
NULL
;
if
(
cl
)
pr_cont
(
"%s"
,
cl
->
name
);
else
pr_cont
(
"%02x"
,
st3
);
pr_cont
(
" reason: "
);
en
=
nvkm_enum_find
(
vm_fault
,
st1
);
if
(
en
)
pr_cont
(
"%s
\n
"
,
en
->
name
);
else
pr_cont
(
"0x%08x
\n
"
,
st1
);
}
int
...
...
@@ -259,7 +243,7 @@ nv50_fb_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
if
(
dma_mapping_error
(
nv_device_base
(
device
),
fb
->
r100c08
))
return
-
EFAULT
;
}
else
{
nv
_warn
(
fb
,
"failed 0x
100c08 page alloc
\n
"
);
nv
km_warn
(
&
fb
->
base
.
subdev
,
"failed
100c08 page alloc
\n
"
);
}
nv_subdev
(
fb
)
->
intr
=
nv50_fb_intr
;
...
...
drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgf100.c
浏览文件 @
3ecd329b
...
...
@@ -126,8 +126,10 @@ gf100_ram_train(struct gf100_ramfuc *fuc, u32 magic)
static
int
gf100_ram_calc
(
struct
nvkm_fb
*
fb
,
u32
freq
)
{
struct
nvkm_clk
*
clk
=
nvkm_clk
(
fb
);
struct
nvkm_bios
*
bios
=
nvkm_bios
(
fb
);
struct
nvkm_subdev
*
subdev
=
&
fb
->
subdev
;
struct
nvkm_device
*
device
=
subdev
->
device
;
struct
nvkm_clk
*
clk
=
device
->
clk
;
struct
nvkm_bios
*
bios
=
device
->
bios
;
struct
gf100_ram
*
ram
=
(
void
*
)
fb
->
ram
;
struct
gf100_ramfuc
*
fuc
=
&
ram
->
fuc
;
struct
nvbios_ramcfg
cfg
;
...
...
@@ -145,20 +147,20 @@ gf100_ram_calc(struct nvkm_fb *fb, u32 freq)
rammap
.
data
=
nvbios_rammapEm
(
bios
,
freq
/
1000
,
&
ver
,
&
rammap
.
size
,
&
cnt
,
&
ramcfg
.
size
,
&
cfg
);
if
(
!
rammap
.
data
||
ver
!=
0x10
||
rammap
.
size
<
0x0e
)
{
nv
_error
(
fb
,
"invalid/missing rammap entry
\n
"
);
nv
km_error
(
subdev
,
"invalid/missing rammap entry
\n
"
);
return
-
EINVAL
;
}
/* locate specific data set for the attached memory */
strap
=
nvbios_ramcfg_index
(
nv_subdev
(
fb
));
if
(
strap
>=
cnt
)
{
nv
_error
(
fb
,
"invalid ramcfg strap
\n
"
);
nv
km_error
(
subdev
,
"invalid ramcfg strap
\n
"
);
return
-
EINVAL
;
}
ramcfg
.
data
=
rammap
.
data
+
rammap
.
size
+
(
strap
*
ramcfg
.
size
);
if
(
!
ramcfg
.
data
||
ver
!=
0x10
||
ramcfg
.
size
<
0x0e
)
{
nv
_error
(
fb
,
"invalid/missing ramcfg entry
\n
"
);
nv
km_error
(
subdev
,
"invalid/missing ramcfg entry
\n
"
);
return
-
EINVAL
;
}
...
...
@@ -168,7 +170,7 @@ gf100_ram_calc(struct nvkm_fb *fb, u32 freq)
timing
.
data
=
nvbios_timingEe
(
bios
,
strap
,
&
ver
,
&
timing
.
size
,
&
cnt
,
&
len
);
if
(
!
timing
.
data
||
ver
!=
0x10
||
timing
.
size
<
0x19
)
{
nv
_error
(
fb
,
"invalid/missing timing entry
\n
"
);
nv
km_error
(
subdev
,
"invalid/missing timing entry
\n
"
);
return
-
EINVAL
;
}
}
else
{
...
...
@@ -213,7 +215,7 @@ gf100_ram_calc(struct nvkm_fb *fb, u32 freq)
ret
=
gt215_pll_calc
(
nv_subdev
(
fb
),
&
ram
->
refpll
,
ram
->
mempll
.
refclk
,
&
N1
,
NULL
,
&
M1
,
&
P
);
if
(
ret
<=
0
)
{
nv
_error
(
fb
,
"unable to calc refpll
\n
"
);
nv
km_error
(
subdev
,
"unable to calc refpll
\n
"
);
return
ret
?
ret
:
-
ERANGE
;
}
...
...
@@ -228,7 +230,7 @@ gf100_ram_calc(struct nvkm_fb *fb, u32 freq)
ret
=
gt215_pll_calc
(
nv_subdev
(
fb
),
&
ram
->
mempll
,
freq
,
&
N1
,
NULL
,
&
M1
,
&
P
);
if
(
ret
<=
0
)
{
nv
_error
(
fb
,
"unable to calc refpll
\n
"
);
nv
km_error
(
subdev
,
"unable to calc refpll
\n
"
);
return
ret
?
ret
:
-
ERANGE
;
}
...
...
@@ -508,7 +510,8 @@ gf100_ram_create_(struct nvkm_object *parent, struct nvkm_object *engine,
void
**
pobject
)
{
struct
nvkm_fb
*
fb
=
nvkm_fb
(
parent
);
struct
nvkm_device
*
device
=
fb
->
subdev
.
device
;
struct
nvkm_subdev
*
subdev
=
&
fb
->
subdev
;
struct
nvkm_device
*
device
=
subdev
->
device
;
struct
nvkm_bios
*
bios
=
device
->
bios
;
struct
nvkm_ram
*
ram
;
const
u32
rsvd_head
=
(
256
*
1024
)
>>
12
;
/* vga memory */
...
...
@@ -525,8 +528,8 @@ gf100_ram_create_(struct nvkm_object *parent, struct nvkm_object *engine,
if
(
ret
)
return
ret
;
nv
_debug
(
fb
,
"0x100800: 0x
%08x
\n
"
,
nvkm_rd32
(
device
,
0x100800
));
nv
_debug
(
fb
,
"parts 0x%08x mask 0x
%08x
\n
"
,
parts
,
pmask
);
nv
km_debug
(
subdev
,
"100800:
%08x
\n
"
,
nvkm_rd32
(
device
,
0x100800
));
nv
km_debug
(
subdev
,
"parts %08x mask
%08x
\n
"
,
parts
,
pmask
);
ram
->
type
=
nvkm_fb_bios_memtype
(
bios
);
ram
->
ranks
=
(
nvkm_rd32
(
device
,
0x10f200
)
&
0x00000004
)
?
2
:
1
;
...
...
@@ -541,7 +544,7 @@ gf100_ram_create_(struct nvkm_object *parent, struct nvkm_object *engine,
uniform
=
false
;
}
nv
_debug
(
fb
,
"%d: mem_amount 0x
%08x
\n
"
,
part
,
size
);
nv
km_debug
(
subdev
,
"%d: size
%08x
\n
"
,
part
,
size
);
ram
->
size
+=
(
u64
)
size
<<
20
;
}
}
...
...
@@ -628,7 +631,9 @@ gf100_ram_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
struct
nvkm_oclass
*
oclass
,
void
*
data
,
u32
size
,
struct
nvkm_object
**
pobject
)
{
struct
nvkm_bios
*
bios
=
nvkm_bios
(
parent
);
struct
nvkm_fb
*
fb
=
nvkm_fb
(
parent
);
struct
nvkm_subdev
*
subdev
=
&
fb
->
subdev
;
struct
nvkm_bios
*
bios
=
subdev
->
device
->
bios
;
struct
gf100_ram
*
ram
;
int
ret
;
...
...
@@ -639,13 +644,13 @@ gf100_ram_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
ret
=
nvbios_pll_parse
(
bios
,
0x0c
,
&
ram
->
refpll
);
if
(
ret
)
{
nv
_error
(
ram
,
"mclk refpll data not found
\n
"
);
nv
km_error
(
subdev
,
"mclk refpll data not found
\n
"
);
return
ret
;
}
ret
=
nvbios_pll_parse
(
bios
,
0x04
,
&
ram
->
mempll
);
if
(
ret
)
{
nv
_error
(
ram
,
"mclk pll data not found
\n
"
);
nv
km_error
(
subdev
,
"mclk pll data not found
\n
"
);
return
ret
;
}
...
...
@@ -656,7 +661,7 @@ gf100_ram_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
ram
->
base
.
tidy
=
gf100_ram_tidy
;
break
;
default:
nv
_warn
(
ram
,
"reclocking of this ram type unsupported
\n
"
);
nv
km_warn
(
subdev
,
"reclocking of this ram type unsupported
\n
"
);
return
0
;
}
...
...
drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgk104.c
浏览文件 @
3ecd329b
...
...
@@ -941,7 +941,7 @@ gk104_ram_calc_data(struct nvkm_fb *fb, u32 khz, struct nvkm_ram_data *data)
}
}
nv
_error
(
ram
,
"ramcfg data for %dMHz not found
\n
"
,
mhz
);
nv
km_error
(
&
fb
->
subdev
,
"ramcfg data for %dMHz not found
\n
"
,
mhz
);
return
-
EINVAL
;
}
...
...
@@ -950,6 +950,7 @@ gk104_ram_calc_xits(struct nvkm_fb *fb, struct nvkm_ram_data *next)
{
struct
gk104_ram
*
ram
=
(
void
*
)
fb
->
ram
;
struct
gk104_ramfuc
*
fuc
=
&
ram
->
fuc
;
struct
nvkm_subdev
*
subdev
=
&
fb
->
subdev
;
int
refclk
,
i
;
int
ret
;
...
...
@@ -977,7 +978,7 @@ gk104_ram_calc_xits(struct nvkm_fb *fb, struct nvkm_ram_data *next)
&
ram
->
fN1
,
&
ram
->
M1
,
&
ram
->
P1
);
fuc
->
mempll
.
refclk
=
ret
;
if
(
ret
<=
0
)
{
nv
_error
(
fb
,
"unable to calc refpll
\n
"
);
nv
km_error
(
subdev
,
"unable to calc refpll
\n
"
);
return
-
EINVAL
;
}
...
...
@@ -993,7 +994,7 @@ gk104_ram_calc_xits(struct nvkm_fb *fb, struct nvkm_ram_data *next)
ret
=
gt215_pll_calc
(
nv_subdev
(
fb
),
&
fuc
->
mempll
,
next
->
freq
,
&
ram
->
N2
,
NULL
,
&
ram
->
M2
,
&
ram
->
P2
);
if
(
ret
<=
0
)
{
nv
_error
(
fb
,
"unable to calc mempll
\n
"
);
nv
km_error
(
subdev
,
"unable to calc mempll
\n
"
);
return
-
EINVAL
;
}
}
...
...
@@ -1247,11 +1248,12 @@ gk104_ram_train_type(struct nvkm_fb *fb, int i, u8 ramcfg,
static
int
gk104_ram_train_init_0
(
struct
nvkm_fb
*
fb
,
struct
gk104_ram_train
*
train
)
{
struct
nvkm_device
*
device
=
fb
->
subdev
.
device
;
struct
nvkm_subdev
*
subdev
=
&
fb
->
subdev
;
struct
nvkm_device
*
device
=
subdev
->
device
;
int
i
,
j
;
if
((
train
->
mask
&
0x03d3
)
!=
0x03d3
)
{
nv
_warn
(
fb
,
"missing link training data
\n
"
);
nv
km_warn
(
subdev
,
"missing link training data
\n
"
);
return
-
EINVAL
;
}
...
...
@@ -1449,7 +1451,8 @@ gk104_ram_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
struct
nvkm_object
**
pobject
)
{
struct
nvkm_fb
*
fb
=
nvkm_fb
(
parent
);
struct
nvkm_device
*
device
=
fb
->
subdev
.
device
;
struct
nvkm_subdev
*
subdev
=
&
fb
->
subdev
;
struct
nvkm_device
*
device
=
subdev
->
device
;
struct
nvkm_bios
*
bios
=
device
->
bios
;
struct
nvkm_gpio
*
gpio
=
device
->
gpio
;
struct
dcb_gpio_func
func
;
...
...
@@ -1473,7 +1476,7 @@ gk104_ram_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
ram
->
base
.
tidy
=
gk104_ram_tidy
;
break
;
default:
nv
_warn
(
fb
,
"reclocking of this RAM type is unsupported
\n
"
);
nv
km_warn
(
subdev
,
"reclocking of this RAM type is unsupported
\n
"
);
break
;
}
...
...
@@ -1510,7 +1513,7 @@ gk104_ram_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
for
(
i
=
0
;
!
ret
;
i
++
)
{
ret
=
gk104_ram_ctor_data
(
ram
,
ramcfg
,
i
);
if
(
ret
&&
ret
!=
-
ENOENT
)
{
nv
_error
(
fb
,
"failed to parse ramcfg data
\n
"
);
nv
km_error
(
subdev
,
"failed to parse ramcfg data
\n
"
);
return
ret
;
}
}
...
...
@@ -1518,13 +1521,13 @@ gk104_ram_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
/* parse bios data for both pll's */
ret
=
nvbios_pll_parse
(
bios
,
0x0c
,
&
ram
->
fuc
.
refpll
);
if
(
ret
)
{
nv
_error
(
fb
,
"mclk refpll data not found
\n
"
);
nv
km_error
(
subdev
,
"mclk refpll data not found
\n
"
);
return
ret
;
}
ret
=
nvbios_pll_parse
(
bios
,
0x04
,
&
ram
->
fuc
.
mempll
);
if
(
ret
)
{
nv
_error
(
fb
,
"mclk pll data not found
\n
"
);
nv
km_error
(
subdev
,
"mclk pll data not found
\n
"
);
return
ret
;
}
...
...
drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgt215.c
浏览文件 @
3ecd329b
...
...
@@ -155,12 +155,13 @@ gt215_link_train_calc(u32 *vals, struct gt215_ltrain *train)
int
gt215_link_train
(
struct
nvkm_fb
*
fb
)
{
struct
nvkm_bios
*
bios
=
nvkm_bios
(
fb
);
struct
gt215_ram
*
ram
=
(
void
*
)
fb
->
ram
;
struct
nvkm_clk
*
clk
=
nvkm_clk
(
fb
);
struct
gt215_ltrain
*
train
=
&
ram
->
ltrain
;
struct
nvkm_device
*
device
=
nv_device
(
fb
);
struct
gt215_ramfuc
*
fuc
=
&
ram
->
fuc
;
struct
nvkm_subdev
*
subdev
=
&
fb
->
subdev
;
struct
nvkm_device
*
device
=
subdev
->
device
;
struct
nvkm_bios
*
bios
=
device
->
bios
;
struct
nvkm_clk
*
clk
=
device
->
clk
;
u32
*
result
,
r1700
;
int
ret
,
i
;
struct
nvbios_M0205T
M0205T
=
{
0
};
...
...
@@ -247,11 +248,11 @@ gt215_link_train(struct nvkm_fb *fb)
ram_train_result
(
fb
,
result
,
64
);
for
(
i
=
0
;
i
<
64
;
i
++
)
nv
_debug
(
fb
,
"Train: %08x"
,
result
[
i
]);
nv
km_debug
(
subdev
,
"Train: %08x"
,
result
[
i
]);
gt215_link_train_calc
(
result
,
train
);
nv
_debug
(
fb
,
"Train: %08x %08x %08x"
,
train
->
r_100720
,
train
->
r_1111e0
,
train
->
r_111400
);
nv
km_debug
(
subdev
,
"Train: %08x %08x %08x"
,
train
->
r_100720
,
train
->
r_1111e0
,
train
->
r_111400
);
kfree
(
result
);
...
...
@@ -352,9 +353,10 @@ gt215_link_train_fini(struct nvkm_fb *fb)
static
int
gt215_ram_timing_calc
(
struct
nvkm_fb
*
fb
,
u32
*
timing
)
{
struct
nvkm_device
*
device
=
fb
->
subdev
.
device
;
struct
gt215_ram
*
ram
=
(
void
*
)
fb
->
ram
;
struct
nvbios_ramcfg
*
cfg
=
&
ram
->
base
.
target
.
bios
;
struct
nvkm_subdev
*
subdev
=
&
fb
->
subdev
;
struct
nvkm_device
*
device
=
subdev
->
device
;
int
tUNK_base
,
tUNK_40_0
,
prevCL
;
u32
cur2
,
cur3
,
cur7
,
cur8
;
...
...
@@ -416,11 +418,11 @@ gt215_ram_timing_calc(struct nvkm_fb *fb, u32 *timing)
break
;
}
nv
_debug
(
fb
,
"Entry: 220: %08x %08x %08x %08x
\n
"
,
timing
[
0
],
timing
[
1
],
timing
[
2
],
timing
[
3
]);
nv
_debug
(
fb
,
" 230: %08x %08x %08x %08x
\n
"
,
timing
[
4
],
timing
[
5
],
timing
[
6
],
timing
[
7
]);
nv
_debug
(
fb
,
" 240: %08x
\n
"
,
timing
[
8
]);
nv
km_debug
(
subdev
,
"Entry: 220: %08x %08x %08x %08x
\n
"
,
timing
[
0
],
timing
[
1
],
timing
[
2
],
timing
[
3
]);
nv
km_debug
(
subdev
,
" 230: %08x %08x %08x %08x
\n
"
,
timing
[
4
],
timing
[
5
],
timing
[
6
],
timing
[
7
]);
nv
km_debug
(
subdev
,
" 240: %08x
\n
"
,
timing
[
8
]);
return
0
;
}
#undef T
...
...
@@ -493,10 +495,12 @@ gt215_ram_fbvref(struct gt215_ramfuc *fuc, u32 val)
static
int
gt215_ram_calc
(
struct
nvkm_fb
*
fb
,
u32
freq
)
{
struct
nvkm_bios
*
bios
=
nvkm_bios
(
fb
);
struct
gt215_ram
*
ram
=
(
void
*
)
fb
->
ram
;
struct
gt215_ramfuc
*
fuc
=
&
ram
->
fuc
;
struct
gt215_ltrain
*
train
=
&
ram
->
ltrain
;
struct
nvkm_subdev
*
subdev
=
&
fb
->
subdev
;
struct
nvkm_device
*
device
=
subdev
->
device
;
struct
nvkm_bios
*
bios
=
device
->
bios
;
struct
gt215_clk_info
mclk
;
struct
nvkm_ram_data
*
next
;
u8
ver
,
hdr
,
cnt
,
len
,
strap
;
...
...
@@ -518,21 +522,21 @@ gt215_ram_calc(struct nvkm_fb *fb, u32 freq)
data
=
nvbios_rammapEm
(
bios
,
freq
/
1000
,
&
ver
,
&
hdr
,
&
cnt
,
&
len
,
&
next
->
bios
);
if
(
!
data
||
ver
!=
0x10
||
hdr
<
0x05
)
{
nv
_error
(
fb
,
"invalid/missing rammap entry
\n
"
);
nv
km_error
(
subdev
,
"invalid/missing rammap entry
\n
"
);
return
-
EINVAL
;
}
/* locate specific data set for the attached memory */
strap
=
nvbios_ramcfg_index
(
nv_subdev
(
fb
));
if
(
strap
>=
cnt
)
{
nv
_error
(
fb
,
"invalid ramcfg strap
\n
"
);
nv
km_error
(
subdev
,
"invalid ramcfg strap
\n
"
);
return
-
EINVAL
;
}
data
=
nvbios_rammapSp
(
bios
,
data
,
ver
,
hdr
,
cnt
,
len
,
strap
,
&
ver
,
&
hdr
,
&
next
->
bios
);
if
(
!
data
||
ver
!=
0x10
||
hdr
<
0x09
)
{
nv
_error
(
fb
,
"invalid/missing ramcfg entry
\n
"
);
nv
km_error
(
subdev
,
"invalid/missing ramcfg entry
\n
"
);
return
-
EINVAL
;
}
...
...
@@ -542,14 +546,14 @@ gt215_ram_calc(struct nvkm_fb *fb, u32 freq)
&
ver
,
&
hdr
,
&
cnt
,
&
len
,
&
next
->
bios
);
if
(
!
data
||
ver
!=
0x10
||
hdr
<
0x17
)
{
nv
_error
(
fb
,
"invalid/missing timing entry
\n
"
);
nv
km_error
(
subdev
,
"invalid/missing timing entry
\n
"
);
return
-
EINVAL
;
}
}
ret
=
gt215_pll_info
(
nvkm_clk
(
fb
),
0x12
,
0x4000
,
freq
,
&
mclk
);
if
(
ret
<
0
)
{
nv
_error
(
fb
,
"failed mclk calculation
\n
"
);
nv
km_error
(
subdev
,
"failed mclk calculation
\n
"
);
return
ret
;
}
...
...
@@ -922,7 +926,8 @@ gt215_ram_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
struct
nvkm_object
**
pobject
)
{
struct
nvkm_fb
*
fb
=
nvkm_fb
(
parent
);
struct
nvkm_gpio
*
gpio
=
nvkm_gpio
(
fb
);
struct
nvkm_subdev
*
subdev
=
&
fb
->
subdev
;
struct
nvkm_gpio
*
gpio
=
subdev
->
device
->
gpio
;
struct
dcb_gpio_func
func
;
struct
gt215_ram
*
ram
;
int
ret
,
i
;
...
...
@@ -942,7 +947,7 @@ gt215_ram_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
ram
->
base
.
tidy
=
gt215_ram_tidy
;
break
;
default:
nv
_warn
(
ram
,
"reclocking of this ram type unsupported
\n
"
);
nv
km_warn
(
subdev
,
"reclocking of this ram type unsupported
\n
"
);
return
0
;
}
...
...
drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv1a.c
浏览文件 @
3ecd329b
...
...
@@ -36,7 +36,7 @@ nv1a_ram_create(struct nvkm_object *parent, struct nvkm_object *engine,
bridge
=
pci_get_bus_and_slot
(
0
,
PCI_DEVFN
(
0
,
1
));
if
(
!
bridge
)
{
nv
_fatal
(
fb
,
"no bridge device
\n
"
);
nv
km_error
(
&
fb
->
subdev
,
"no bridge device
\n
"
);
return
-
ENODEV
;
}
...
...
drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv40.c
浏览文件 @
3ecd329b
...
...
@@ -33,7 +33,8 @@
int
nv40_ram_calc
(
struct
nvkm_fb
*
fb
,
u32
freq
)
{
struct
nvkm_bios
*
bios
=
nvkm_bios
(
fb
);
struct
nvkm_subdev
*
subdev
=
&
fb
->
subdev
;
struct
nvkm_bios
*
bios
=
subdev
->
device
->
bios
;
struct
nv40_ram
*
ram
=
(
void
*
)
fb
->
ram
;
struct
nvbios_pll
pll
;
int
N1
,
M1
,
N2
,
M2
;
...
...
@@ -41,7 +42,7 @@ nv40_ram_calc(struct nvkm_fb *fb, u32 freq)
ret
=
nvbios_pll_parse
(
bios
,
0x04
,
&
pll
);
if
(
ret
)
{
nv
_error
(
fb
,
"mclk pll data not found
\n
"
);
nv
km_error
(
subdev
,
"mclk pll data not found
\n
"
);
return
ret
;
}
...
...
drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv50.c
浏览文件 @
3ecd329b
...
...
@@ -68,9 +68,10 @@ struct nv50_ram {
static
int
nv50_ram_timing_calc
(
struct
nvkm_fb
*
fb
,
u32
*
timing
)
{
struct
nvkm_device
*
device
=
fb
->
subdev
.
device
;
struct
nv50_ram
*
ram
=
(
void
*
)
fb
->
ram
;
struct
nvbios_ramcfg
*
cfg
=
&
ram
->
base
.
target
.
bios
;
struct
nvkm_subdev
*
subdev
=
&
fb
->
subdev
;
struct
nvkm_device
*
device
=
subdev
->
device
;
u32
cur2
,
cur4
,
cur7
,
cur8
;
u8
unkt3b
;
...
...
@@ -134,11 +135,11 @@ nv50_ram_timing_calc(struct nvkm_fb *fb, u32 *timing)
timing
[
8
]
|=
(
T
(
CL
)
-
2
);
}
nv
_debug
(
fb
,
" 220: %08x %08x %08x %08x
\n
"
,
timing
[
0
],
timing
[
1
],
timing
[
2
],
timing
[
3
]);
nv
_debug
(
fb
,
" 230: %08x %08x %08x %08x
\n
"
,
timing
[
4
],
timing
[
5
],
timing
[
6
],
timing
[
7
]);
nv
_debug
(
fb
,
" 240: %08x
\n
"
,
timing
[
8
]);
nv
km_debug
(
subdev
,
" 220: %08x %08x %08x %08x
\n
"
,
timing
[
0
],
timing
[
1
],
timing
[
2
],
timing
[
3
]);
nv
km_debug
(
subdev
,
" 230: %08x %08x %08x %08x
\n
"
,
timing
[
4
],
timing
[
5
],
timing
[
6
],
timing
[
7
]);
nv
km_debug
(
subdev
,
" 240: %08x
\n
"
,
timing
[
8
]);
return
0
;
}
#undef T
...
...
@@ -154,9 +155,10 @@ nvkm_sddr2_dll_reset(struct nv50_ramseq *hwsq)
static
int
nv50_ram_calc
(
struct
nvkm_fb
*
fb
,
u32
freq
)
{
struct
nvkm_bios
*
bios
=
nvkm_bios
(
fb
);
struct
nv50_ram
*
ram
=
(
void
*
)
fb
->
ram
;
struct
nv50_ramseq
*
hwsq
=
&
ram
->
hwsq
;
struct
nvkm_subdev
*
subdev
=
&
fb
->
subdev
;
struct
nvkm_bios
*
bios
=
subdev
->
device
->
bios
;
struct
nvbios_perfE
perfE
;
struct
nvbios_pll
mpll
;
struct
nvkm_ram_data
*
next
;
...
...
@@ -178,7 +180,7 @@ nv50_ram_calc(struct nvkm_fb *fb, u32 freq)
&
size
,
&
perfE
);
if
(
!
data
||
(
ver
<
0x25
||
ver
>=
0x40
)
||
(
size
<
2
))
{
nv
_error
(
fb
,
"invalid/missing perftab entry
\n
"
);
nv
km_error
(
subdev
,
"invalid/missing perftab entry
\n
"
);
return
-
EINVAL
;
}
}
while
(
perfE
.
memory
<
freq
);
...
...
@@ -188,14 +190,14 @@ nv50_ram_calc(struct nvkm_fb *fb, u32 freq)
/* locate specific data set for the attached memory */
strap
=
nvbios_ramcfg_index
(
nv_subdev
(
fb
));
if
(
strap
>=
cnt
)
{
nv
_error
(
fb
,
"invalid ramcfg strap
\n
"
);
nv
km_error
(
subdev
,
"invalid ramcfg strap
\n
"
);
return
-
EINVAL
;
}
data
=
nvbios_rammapSp_from_perf
(
bios
,
data
+
hdr
,
size
,
strap
,
&
next
->
bios
);
if
(
!
data
)
{
nv
_error
(
fb
,
"invalid/missing rammap entry "
);
nv
km_error
(
subdev
,
"invalid/missing rammap entry "
);
return
-
EINVAL
;
}
...
...
@@ -204,7 +206,7 @@ nv50_ram_calc(struct nvkm_fb *fb, u32 freq)
data
=
nvbios_timingEp
(
bios
,
next
->
bios
.
ramcfg_timing
,
&
ver
,
&
hdr
,
&
cnt
,
&
len
,
&
next
->
bios
);
if
(
!
data
||
ver
!=
0x10
||
hdr
<
0x12
)
{
nv
_error
(
fb
,
"invalid/missing timing entry "
nv
km_error
(
subdev
,
"invalid/missing timing entry "
"%02x %04x %02x %02x
\n
"
,
strap
,
data
,
ver
,
hdr
);
return
-
EINVAL
;
...
...
@@ -494,7 +496,8 @@ nv50_ram_get(struct nvkm_fb *fb, u64 size, u32 align, u32 ncmin,
static
u32
nv50_fb_vram_rblock
(
struct
nvkm_fb
*
fb
,
struct
nvkm_ram
*
ram
)
{
struct
nvkm_device
*
device
=
fb
->
subdev
.
device
;
struct
nvkm_subdev
*
subdev
=
&
fb
->
subdev
;
struct
nvkm_device
*
device
=
subdev
->
device
;
int
colbits
,
rowbitsa
,
rowbitsb
,
banks
;
u64
rowsize
,
predicted
;
u32
r0
,
r4
,
rt
,
rblock_size
;
...
...
@@ -502,8 +505,8 @@ nv50_fb_vram_rblock(struct nvkm_fb *fb, struct nvkm_ram *ram)
r0
=
nvkm_rd32
(
device
,
0x100200
);
r4
=
nvkm_rd32
(
device
,
0x100204
);
rt
=
nvkm_rd32
(
device
,
0x100250
);
nv
_debug
(
fb
,
"memcfg 0x%08x 0x%08x 0x%08x 0x
%08x
\n
"
,
r0
,
r4
,
rt
,
nvkm_rd32
(
device
,
0x001540
));
nv
km_debug
(
subdev
,
"memcfg %08x %08x %08x
%08x
\n
"
,
r0
,
r4
,
rt
,
nvkm_rd32
(
device
,
0x001540
));
colbits
=
(
r4
&
0x0000f000
)
>>
12
;
rowbitsa
=
((
r4
&
0x000f0000
)
>>
16
)
+
8
;
...
...
@@ -516,15 +519,15 @@ nv50_fb_vram_rblock(struct nvkm_fb *fb, struct nvkm_ram *ram)
predicted
+=
rowsize
<<
rowbitsb
;
if
(
predicted
!=
ram
->
size
)
{
nv
_warn
(
fb
,
"memory controller reports %d MiB VRAM
\n
"
,
(
u32
)(
ram
->
size
>>
20
));
nv
km_warn
(
subdev
,
"memory controller reports %d MiB VRAM
\n
"
,
(
u32
)(
ram
->
size
>>
20
));
}
rblock_size
=
rowsize
;
if
(
rt
&
1
)
rblock_size
*=
3
;
nv
_debug
(
fb
,
"rblock %d bytes
\n
"
,
rblock_size
);
nv
km_debug
(
subdev
,
"rblock %d bytes
\n
"
,
rblock_size
);
return
rblock_size
;
}
...
...
@@ -584,6 +587,8 @@ nv50_ram_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
struct
nvkm_oclass
*
oclass
,
void
*
data
,
u32
datasize
,
struct
nvkm_object
**
pobject
)
{
struct
nvkm_fb
*
fb
=
nvkm_fb
(
parent
);
struct
nvkm_subdev
*
subdev
=
&
fb
->
subdev
;
struct
nv50_ram
*
ram
;
int
ret
,
i
;
...
...
@@ -600,7 +605,7 @@ nv50_ram_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
break
;
case
NV_MEM_TYPE_DDR2
:
default:
nv
_warn
(
ram
,
"reclocking of this ram type unsupported
\n
"
);
nv
km_warn
(
subdev
,
"reclocking of this ram type unsupported
\n
"
);
return
0
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录