Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
2b700825
K
Kernel
项目概览
openeuler
/
Kernel
大约 1 年 前同步成功
通知
5
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
2b700825
编写于
8月 20, 2015
作者:
B
Ben Skeggs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/nouveau/mc: move device irq handling to platform-specific code
Signed-off-by:
N
Ben Skeggs
<
bskeggs@redhat.com
>
上级
ae0a5b2d
变更
19
显示空白变更内容
内联
并排
Showing
19 changed file
with
182 addition
and
324 deletion
+182
-324
drivers/gpu/drm/nouveau/include/nvkm/core/device.h
drivers/gpu/drm/nouveau/include/nvkm/core/device.h
+1
-3
drivers/gpu/drm/nouveau/include/nvkm/core/tegra.h
drivers/gpu/drm/nouveau/include/nvkm/core/tegra.h
+1
-0
drivers/gpu/drm/nouveau/include/nvkm/subdev/mc.h
drivers/gpu/drm/nouveau/include/nvkm/subdev/mc.h
+1
-8
drivers/gpu/drm/nouveau/include/nvkm/subdev/pci.h
drivers/gpu/drm/nouveau/include/nvkm/subdev/pci.h
+3
-1
drivers/gpu/drm/nouveau/nvkm/engine/device/base.c
drivers/gpu/drm/nouveau/nvkm/engine/device/base.c
+34
-38
drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
+46
-0
drivers/gpu/drm/nouveau/nvkm/subdev/mc/Kbuild
drivers/gpu/drm/nouveau/nvkm/subdev/mc/Kbuild
+0
-4
drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c
drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c
+19
-80
drivers/gpu/drm/nouveau/nvkm/subdev/mc/g94.c
drivers/gpu/drm/nouveau/nvkm/subdev/mc/g94.c
+0
-40
drivers/gpu/drm/nouveau/nvkm/subdev/mc/g98.c
drivers/gpu/drm/nouveau/nvkm/subdev/mc/g98.c
+0
-1
drivers/gpu/drm/nouveau/nvkm/subdev/mc/gf100.c
drivers/gpu/drm/nouveau/nvkm/subdev/mc/gf100.c
+0
-7
drivers/gpu/drm/nouveau/nvkm/subdev/mc/gf106.c
drivers/gpu/drm/nouveau/nvkm/subdev/mc/gf106.c
+0
-41
drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk20a.c
drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk20a.c
+0
-1
drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv40.c
drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv40.c
+0
-46
drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv44.c
drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv44.c
+0
-1
drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv4c.c
drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv4c.c
+0
-39
drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv50.c
drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv50.c
+0
-8
drivers/gpu/drm/nouveau/nvkm/subdev/mc/priv.h
drivers/gpu/drm/nouveau/nvkm/subdev/mc/priv.h
+0
-3
drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c
drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c
+77
-3
未找到文件。
drivers/gpu/drm/nouveau/include/nvkm/core/device.h
浏览文件 @
2b700825
...
...
@@ -146,6 +146,7 @@ struct nvkm_device_func {
struct
nvkm_device_tegra
*
(
*
tegra
)(
struct
nvkm_device
*
);
void
*
(
*
dtor
)(
struct
nvkm_device
*
);
int
(
*
preinit
)(
struct
nvkm_device
*
);
int
(
*
init
)(
struct
nvkm_device
*
);
void
(
*
fini
)(
struct
nvkm_device
*
,
bool
suspend
);
};
...
...
@@ -247,9 +248,6 @@ nv_device_resource_start(struct nvkm_device *device, unsigned int bar);
resource_size_t
nv_device_resource_len
(
struct
nvkm_device
*
device
,
unsigned
int
bar
);
int
nv_device_get_irq
(
struct
nvkm_device
*
device
,
bool
stall
);
struct
platform_device
;
enum
nv_bus_type
{
...
...
drivers/gpu/drm/nouveau/include/nvkm/core/tegra.h
浏览文件 @
2b700825
...
...
@@ -5,6 +5,7 @@
struct
nvkm_device_tegra
{
struct
nvkm_device
device
;
struct
platform_device
*
pdev
;
int
irq
;
};
int
nvkm_device_tegra_new
(
struct
platform_device
*
,
...
...
drivers/gpu/drm/nouveau/include/nvkm/subdev/mc.h
浏览文件 @
2b700825
...
...
@@ -5,24 +5,17 @@
struct
nvkm_mc
{
const
struct
nvkm_mc_func
*
func
;
struct
nvkm_subdev
subdev
;
unsigned
int
irq
;
bool
use_msi
;
};
void
nvkm_mc_intr
(
struct
nvkm_mc
*
,
bool
*
handled
);
void
nvkm_mc_intr_unarm
(
struct
nvkm_mc
*
);
void
nvkm_mc_intr_rearm
(
struct
nvkm_mc
*
);
u32
nvkm_mc_intr_mask
(
struct
nvkm_mc
*
);
void
nvkm_mc_unk260
(
struct
nvkm_mc
*
,
u32
data
);
int
nv04_mc_new
(
struct
nvkm_device
*
,
int
,
struct
nvkm_mc
**
);
int
nv40_mc_new
(
struct
nvkm_device
*
,
int
,
struct
nvkm_mc
**
);
int
nv44_mc_new
(
struct
nvkm_device
*
,
int
,
struct
nvkm_mc
**
);
int
nv4c_mc_new
(
struct
nvkm_device
*
,
int
,
struct
nvkm_mc
**
);
int
nv50_mc_new
(
struct
nvkm_device
*
,
int
,
struct
nvkm_mc
**
);
int
g94_mc_new
(
struct
nvkm_device
*
,
int
,
struct
nvkm_mc
**
);
int
g98_mc_new
(
struct
nvkm_device
*
,
int
,
struct
nvkm_mc
**
);
int
gf100_mc_new
(
struct
nvkm_device
*
,
int
,
struct
nvkm_mc
**
);
int
gf106_mc_new
(
struct
nvkm_device
*
,
int
,
struct
nvkm_mc
**
);
int
gk20a_mc_new
(
struct
nvkm_device
*
,
int
,
struct
nvkm_mc
**
);
#endif
drivers/gpu/drm/nouveau/include/nvkm/subdev/pci.h
浏览文件 @
2b700825
...
...
@@ -5,13 +5,15 @@
struct
nvkm_pci
{
const
struct
nvkm_pci_func
*
func
;
struct
nvkm_subdev
subdev
;
struct
pci_dev
*
pdev
;
int
irq
;
bool
msi
;
};
u32
nvkm_pci_rd32
(
struct
nvkm_pci
*
,
u16
addr
);
void
nvkm_pci_wr08
(
struct
nvkm_pci
*
,
u16
addr
,
u8
data
);
void
nvkm_pci_wr32
(
struct
nvkm_pci
*
,
u16
addr
,
u32
data
);
void
nvkm_pci_rom_shadow
(
struct
nvkm_pci
*
,
bool
shadow
);
void
nvkm_pci_msi_rearm
(
struct
nvkm_pci
*
);
int
nv04_pci_new
(
struct
nvkm_device
*
,
int
,
struct
nvkm_pci
**
);
int
nv40_pci_new
(
struct
nvkm_device
*
,
int
,
struct
nvkm_pci
**
);
...
...
drivers/gpu/drm/nouveau/nvkm/engine/device/base.c
浏览文件 @
2b700825
...
...
@@ -479,7 +479,7 @@ nv40_chipset = {
.
gpio
=
nv10_gpio_new
,
.
i2c
=
nv04_i2c_new
,
.
imem
=
nv40_instmem_new
,
.
mc
=
nv
40
_mc_new
,
.
mc
=
nv
04
_mc_new
,
.
mmu
=
nv04_mmu_new
,
.
pci
=
nv40_pci_new
,
.
therm
=
nv40_therm_new
,
...
...
@@ -505,7 +505,7 @@ nv41_chipset = {
.
gpio
=
nv10_gpio_new
,
.
i2c
=
nv04_i2c_new
,
.
imem
=
nv40_instmem_new
,
.
mc
=
nv
40
_mc_new
,
.
mc
=
nv
04
_mc_new
,
.
mmu
=
nv41_mmu_new
,
.
pci
=
nv40_pci_new
,
.
therm
=
nv40_therm_new
,
...
...
@@ -531,7 +531,7 @@ nv42_chipset = {
.
gpio
=
nv10_gpio_new
,
.
i2c
=
nv04_i2c_new
,
.
imem
=
nv40_instmem_new
,
.
mc
=
nv
40
_mc_new
,
.
mc
=
nv
04
_mc_new
,
.
mmu
=
nv41_mmu_new
,
.
pci
=
nv40_pci_new
,
.
therm
=
nv40_therm_new
,
...
...
@@ -557,7 +557,7 @@ nv43_chipset = {
.
gpio
=
nv10_gpio_new
,
.
i2c
=
nv04_i2c_new
,
.
imem
=
nv40_instmem_new
,
.
mc
=
nv
40
_mc_new
,
.
mc
=
nv
04
_mc_new
,
.
mmu
=
nv41_mmu_new
,
.
pci
=
nv40_pci_new
,
.
therm
=
nv40_therm_new
,
...
...
@@ -609,7 +609,7 @@ nv45_chipset = {
.
gpio
=
nv10_gpio_new
,
.
i2c
=
nv04_i2c_new
,
.
imem
=
nv40_instmem_new
,
.
mc
=
nv
40
_mc_new
,
.
mc
=
nv
04
_mc_new
,
.
mmu
=
nv04_mmu_new
,
.
pci
=
nv40_pci_new
,
.
therm
=
nv40_therm_new
,
...
...
@@ -661,7 +661,7 @@ nv47_chipset = {
.
gpio
=
nv10_gpio_new
,
.
i2c
=
nv04_i2c_new
,
.
imem
=
nv40_instmem_new
,
.
mc
=
nv
40
_mc_new
,
.
mc
=
nv
04
_mc_new
,
.
mmu
=
nv41_mmu_new
,
.
pci
=
nv40_pci_new
,
.
therm
=
nv40_therm_new
,
...
...
@@ -687,7 +687,7 @@ nv49_chipset = {
.
gpio
=
nv10_gpio_new
,
.
i2c
=
nv04_i2c_new
,
.
imem
=
nv40_instmem_new
,
.
mc
=
nv
40
_mc_new
,
.
mc
=
nv
04
_mc_new
,
.
mmu
=
nv41_mmu_new
,
.
pci
=
nv40_pci_new
,
.
therm
=
nv40_therm_new
,
...
...
@@ -739,7 +739,7 @@ nv4b_chipset = {
.
gpio
=
nv10_gpio_new
,
.
i2c
=
nv04_i2c_new
,
.
imem
=
nv40_instmem_new
,
.
mc
=
nv
40
_mc_new
,
.
mc
=
nv
04
_mc_new
,
.
mmu
=
nv41_mmu_new
,
.
pci
=
nv40_pci_new
,
.
therm
=
nv40_therm_new
,
...
...
@@ -765,7 +765,7 @@ nv4c_chipset = {
.
gpio
=
nv10_gpio_new
,
.
i2c
=
nv04_i2c_new
,
.
imem
=
nv40_instmem_new
,
.
mc
=
nv4
c
_mc_new
,
.
mc
=
nv4
4
_mc_new
,
.
mmu
=
nv44_mmu_new
,
.
pci
=
nv4c_pci_new
,
.
therm
=
nv40_therm_new
,
...
...
@@ -791,7 +791,7 @@ nv4e_chipset = {
.
gpio
=
nv10_gpio_new
,
.
i2c
=
nv4e_i2c_new
,
.
imem
=
nv40_instmem_new
,
.
mc
=
nv4
c
_mc_new
,
.
mc
=
nv4
4
_mc_new
,
.
mmu
=
nv44_mmu_new
,
.
pci
=
nv4c_pci_new
,
.
therm
=
nv40_therm_new
,
...
...
@@ -846,7 +846,7 @@ nv63_chipset = {
.
gpio
=
nv10_gpio_new
,
.
i2c
=
nv04_i2c_new
,
.
imem
=
nv40_instmem_new
,
.
mc
=
nv4
c
_mc_new
,
.
mc
=
nv4
4
_mc_new
,
.
mmu
=
nv44_mmu_new
,
.
pci
=
nv4c_pci_new
,
.
therm
=
nv40_therm_new
,
...
...
@@ -872,7 +872,7 @@ nv67_chipset = {
.
gpio
=
nv10_gpio_new
,
.
i2c
=
nv04_i2c_new
,
.
imem
=
nv40_instmem_new
,
.
mc
=
nv4
c
_mc_new
,
.
mc
=
nv4
4
_mc_new
,
.
mmu
=
nv44_mmu_new
,
.
pci
=
nv4c_pci_new
,
.
therm
=
nv40_therm_new
,
...
...
@@ -898,7 +898,7 @@ nv68_chipset = {
.
gpio
=
nv10_gpio_new
,
.
i2c
=
nv04_i2c_new
,
.
imem
=
nv40_instmem_new
,
.
mc
=
nv4
c
_mc_new
,
.
mc
=
nv4
4
_mc_new
,
.
mmu
=
nv44_mmu_new
,
.
pci
=
nv4c_pci_new
,
.
therm
=
nv40_therm_new
,
...
...
@@ -1022,7 +1022,7 @@ nv94_chipset = {
.
gpio
=
g94_gpio_new
,
.
i2c
=
g94_i2c_new
,
.
imem
=
nv50_instmem_new
,
.
mc
=
g94
_mc_new
,
.
mc
=
nv50
_mc_new
,
.
mmu
=
nv50_mmu_new
,
.
mxm
=
nv50_mxm_new
,
.
pci
=
nv40_pci_new
,
...
...
@@ -1054,7 +1054,7 @@ nv96_chipset = {
.
gpio
=
g94_gpio_new
,
.
i2c
=
g94_i2c_new
,
.
imem
=
nv50_instmem_new
,
.
mc
=
g94
_mc_new
,
.
mc
=
nv50
_mc_new
,
.
mmu
=
nv50_mmu_new
,
.
mxm
=
nv50_mxm_new
,
.
pci
=
nv40_pci_new
,
...
...
@@ -1385,7 +1385,7 @@ nvc1_chipset = {
.
ibus
=
gf100_ibus_new
,
.
imem
=
nv50_instmem_new
,
.
ltc
=
gf100_ltc_new
,
.
mc
=
gf10
6
_mc_new
,
.
mc
=
gf10
0
_mc_new
,
.
mmu
=
gf100_mmu_new
,
.
mxm
=
nv50_mxm_new
,
.
pci
=
nv40_pci_new
,
...
...
@@ -1420,7 +1420,7 @@ nvc3_chipset = {
.
ibus
=
gf100_ibus_new
,
.
imem
=
nv50_instmem_new
,
.
ltc
=
gf100_ltc_new
,
.
mc
=
gf10
6
_mc_new
,
.
mc
=
gf10
0
_mc_new
,
.
mmu
=
gf100_mmu_new
,
.
mxm
=
nv50_mxm_new
,
.
pci
=
nv40_pci_new
,
...
...
@@ -1563,7 +1563,7 @@ nvcf_chipset = {
.
ibus
=
gf100_ibus_new
,
.
imem
=
nv50_instmem_new
,
.
ltc
=
gf100_ltc_new
,
.
mc
=
gf10
6
_mc_new
,
.
mc
=
gf10
0
_mc_new
,
.
mmu
=
gf100_mmu_new
,
.
mxm
=
nv50_mxm_new
,
.
pci
=
nv40_pci_new
,
...
...
@@ -1598,7 +1598,7 @@ nvd7_chipset = {
.
ibus
=
gf100_ibus_new
,
.
imem
=
nv50_instmem_new
,
.
ltc
=
gf100_ltc_new
,
.
mc
=
gf10
6
_mc_new
,
.
mc
=
gf10
0
_mc_new
,
.
mmu
=
gf100_mmu_new
,
.
mxm
=
nv50_mxm_new
,
.
pci
=
nv40_pci_new
,
...
...
@@ -1631,7 +1631,7 @@ nvd9_chipset = {
.
ibus
=
gf100_ibus_new
,
.
imem
=
nv50_instmem_new
,
.
ltc
=
gf100_ltc_new
,
.
mc
=
gf10
6
_mc_new
,
.
mc
=
gf10
0
_mc_new
,
.
mmu
=
gf100_mmu_new
,
.
mxm
=
nv50_mxm_new
,
.
pci
=
nv40_pci_new
,
...
...
@@ -1666,7 +1666,7 @@ nve4_chipset = {
.
ibus
=
gk104_ibus_new
,
.
imem
=
nv50_instmem_new
,
.
ltc
=
gk104_ltc_new
,
.
mc
=
gf10
6
_mc_new
,
.
mc
=
gf10
0
_mc_new
,
.
mmu
=
gf100_mmu_new
,
.
mxm
=
nv50_mxm_new
,
.
pci
=
nv40_pci_new
,
...
...
@@ -1703,7 +1703,7 @@ nve6_chipset = {
.
ibus
=
gk104_ibus_new
,
.
imem
=
nv50_instmem_new
,
.
ltc
=
gk104_ltc_new
,
.
mc
=
gf10
6
_mc_new
,
.
mc
=
gf10
0
_mc_new
,
.
mmu
=
gf100_mmu_new
,
.
mxm
=
nv50_mxm_new
,
.
pci
=
nv40_pci_new
,
...
...
@@ -1740,7 +1740,7 @@ nve7_chipset = {
.
ibus
=
gk104_ibus_new
,
.
imem
=
nv50_instmem_new
,
.
ltc
=
gk104_ltc_new
,
.
mc
=
gf10
6
_mc_new
,
.
mc
=
gf10
0
_mc_new
,
.
mmu
=
gf100_mmu_new
,
.
mxm
=
nv50_mxm_new
,
.
pci
=
nv40_pci_new
,
...
...
@@ -1801,7 +1801,7 @@ nvf0_chipset = {
.
ibus
=
gk104_ibus_new
,
.
imem
=
nv50_instmem_new
,
.
ltc
=
gk104_ltc_new
,
.
mc
=
gf10
6
_mc_new
,
.
mc
=
gf10
0
_mc_new
,
.
mmu
=
gf100_mmu_new
,
.
mxm
=
nv50_mxm_new
,
.
pci
=
nv40_pci_new
,
...
...
@@ -1837,7 +1837,7 @@ nvf1_chipset = {
.
ibus
=
gk104_ibus_new
,
.
imem
=
nv50_instmem_new
,
.
ltc
=
gk104_ltc_new
,
.
mc
=
gf10
6
_mc_new
,
.
mc
=
gf10
0
_mc_new
,
.
mmu
=
gf100_mmu_new
,
.
mxm
=
nv50_mxm_new
,
.
pci
=
nv40_pci_new
,
...
...
@@ -2231,11 +2231,17 @@ nvkm_device_init(struct nvkm_device *device)
nvdev_trace
(
device
,
"init running...
\n
"
);
time
=
ktime_to_us
(
ktime_get
());
if
(
device
->
func
->
init
)
{
ret
=
device
->
func
->
init
(
device
);
if
(
ret
)
goto
fail
;
}
for
(
i
=
0
;
i
<
NVKM_SUBDEV_NR
;
i
++
)
{
if
((
subdev
=
nvkm_device_subdev
(
device
,
i
)))
{
ret
=
nvkm_subdev_init
(
subdev
);
if
(
ret
)
goto
fail
;
goto
fail
_subdev
;
}
}
...
...
@@ -2245,12 +2251,13 @@ nvkm_device_init(struct nvkm_device *device)
nvdev_trace
(
device
,
"init completed in %lldus
\n
"
,
time
);
return
0
;
fail:
fail
_subdev
:
do
{
if
((
subdev
=
nvkm_device_subdev
(
device
,
i
)))
nvkm_subdev_fini
(
subdev
,
false
);
}
while
(
--
i
>=
0
);
fail:
nvdev_error
(
device
,
"init failed with %d
\n
"
,
ret
);
return
ret
;
}
...
...
@@ -2285,17 +2292,6 @@ nv_device_resource_len(struct nvkm_device *device, unsigned int bar)
}
}
int
nv_device_get_irq
(
struct
nvkm_device
*
device
,
bool
stall
)
{
if
(
nv_device_is_pci
(
device
))
{
return
device
->
pdev
->
irq
;
}
else
{
return
platform_get_irq_byname
(
device
->
platformdev
,
stall
?
"stall"
:
"nonstall"
);
}
}
void
nvkm_device_del
(
struct
nvkm_device
**
pdevice
)
{
...
...
drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
浏览文件 @
2b700825
...
...
@@ -31,9 +31,54 @@ nvkm_device_tegra(struct nvkm_device *obj)
return
container_of
(
obj
,
struct
nvkm_device_tegra
,
device
);
}
static
irqreturn_t
nvkm_device_tegra_intr
(
int
irq
,
void
*
arg
)
{
struct
nvkm_device_tegra
*
tdev
=
arg
;
struct
nvkm_mc
*
mc
=
tdev
->
device
.
mc
;
bool
handled
=
false
;
if
(
likely
(
mc
))
{
nvkm_mc_intr_unarm
(
mc
);
nvkm_mc_intr
(
mc
,
&
handled
);
nvkm_mc_intr_rearm
(
mc
);
}
return
handled
?
IRQ_HANDLED
:
IRQ_NONE
;
}
static
void
nvkm_device_tegra_fini
(
struct
nvkm_device
*
device
,
bool
suspend
)
{
struct
nvkm_device_tegra
*
tdev
=
nvkm_device_tegra
(
device
);
if
(
tdev
->
irq
)
{
free_irq
(
tdev
->
irq
,
tdev
);
tdev
->
irq
=
0
;
};
}
static
int
nvkm_device_tegra_init
(
struct
nvkm_device
*
device
)
{
struct
nvkm_device_tegra
*
tdev
=
nvkm_device_tegra
(
device
);
int
irq
,
ret
;
irq
=
platform_get_irq_byname
(
tdev
->
pdev
,
"stall"
);
if
(
irq
<
0
)
return
irq
;
ret
=
request_irq
(
irq
,
nvkm_device_tegra_intr
,
IRQF_SHARED
,
"nvkm"
,
tdev
);
if
(
ret
)
return
ret
;
tdev
->
irq
=
irq
;
return
0
;
}
static
const
struct
nvkm_device_func
nvkm_device_tegra_func
=
{
.
tegra
=
nvkm_device_tegra
,
.
init
=
nvkm_device_tegra_init
,
.
fini
=
nvkm_device_tegra_fini
,
};
int
...
...
@@ -48,6 +93,7 @@ nvkm_device_tegra_new(struct platform_device *pdev,
return
-
ENOMEM
;
*
pdevice
=
&
tdev
->
device
;
tdev
->
pdev
=
pdev
;
tdev
->
irq
=
-
1
;
return
nvkm_device_ctor
(
&
nvkm_device_tegra_func
,
NULL
,
pdev
,
NVKM_BUS_PLATFORM
,
pdev
->
id
,
NULL
,
...
...
drivers/gpu/drm/nouveau/nvkm/subdev/mc/Kbuild
浏览文件 @
2b700825
nvkm-y += nvkm/subdev/mc/base.o
nvkm-y += nvkm/subdev/mc/nv04.o
nvkm-y += nvkm/subdev/mc/nv40.o
nvkm-y += nvkm/subdev/mc/nv44.o
nvkm-y += nvkm/subdev/mc/nv4c.o
nvkm-y += nvkm/subdev/mc/nv50.o
nvkm-y += nvkm/subdev/mc/g94.o
nvkm-y += nvkm/subdev/mc/g98.o
nvkm-y += nvkm/subdev/mc/gf100.o
nvkm-y += nvkm/subdev/mc/gf106.o
nvkm-y += nvkm/subdev/mc/gk20a.o
drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c
浏览文件 @
2b700825
...
...
@@ -44,7 +44,7 @@ nvkm_mc_intr_rearm(struct nvkm_mc *mc)
return
mc
->
func
->
intr_rearm
(
mc
);
}
u32
static
u32
nvkm_mc_intr_mask
(
struct
nvkm_mc
*
mc
)
{
u32
intr
=
mc
->
func
->
intr_mask
(
mc
);
...
...
@@ -53,39 +53,28 @@ nvkm_mc_intr_mask(struct nvkm_mc *mc)
return
intr
;
}
static
irqreturn_t
nvkm_mc_intr
(
int
irq
,
void
*
arg
)
void
nvkm_mc_intr
(
struct
nvkm_mc
*
mc
,
bool
*
handled
)
{
struct
nvkm_mc
*
mc
=
arg
;
struct
nvkm_subdev
*
subdev
=
&
mc
->
subdev
;
struct
nvkm_device
*
device
=
subdev
->
device
;
struct
nvkm_device
*
device
=
mc
->
subdev
.
device
;
struct
nvkm_subdev
*
subdev
;
const
struct
nvkm_mc_intr
*
map
=
mc
->
func
->
intr
;
struct
nvkm_subdev
*
unit
;
u32
intr
;
nvkm_mc_intr_unarm
(
mc
);
intr
=
nvkm_mc_intr_mask
(
mc
);
if
(
mc
->
use_msi
)
mc
->
func
->
msi_rearm
(
mc
);
u32
stat
,
intr
;
if
(
intr
)
{
u32
stat
=
intr
=
nvkm_mc_intr_mask
(
mc
);
stat
=
intr
=
nvkm_mc_intr_mask
(
mc
);
while
(
map
->
stat
)
{
if
(
intr
&
map
->
stat
)
{
unit
=
nvkm_device_subdev
(
device
,
map
->
unit
);
if
(
unit
)
nvkm_subdev_intr
(
unit
);
subdev
=
nvkm_device_subdev
(
device
,
map
->
unit
);
if
(
subdev
)
nvkm_subdev_intr
(
subdev
);
stat
&=
~
map
->
stat
;
}
map
++
;
}
if
(
stat
)
nvkm_error
(
subdev
,
"unknown intr %08x
\n
"
,
stat
);
}
nvkm_mc_intr_rearm
(
mc
);
return
intr
?
IRQ_HANDLED
:
IRQ_NONE
;
nvkm_error
(
&
mc
->
subdev
,
"intr %08x
\n
"
,
stat
);
*
handled
=
intr
!=
0
;
}
static
int
...
...
@@ -96,13 +85,6 @@ nvkm_mc_fini(struct nvkm_subdev *subdev, bool suspend)
return
0
;
}
static
int
nvkm_mc_oneinit
(
struct
nvkm_subdev
*
subdev
)
{
struct
nvkm_mc
*
mc
=
nvkm_mc
(
subdev
);
return
request_irq
(
mc
->
irq
,
nvkm_mc_intr
,
IRQF_SHARED
,
"nvkm"
,
mc
);
}
static
int
nvkm_mc_init
(
struct
nvkm_subdev
*
subdev
)
{
...
...
@@ -116,18 +98,12 @@ nvkm_mc_init(struct nvkm_subdev *subdev)
static
void
*
nvkm_mc_dtor
(
struct
nvkm_subdev
*
subdev
)
{
struct
nvkm_mc
*
mc
=
nvkm_mc
(
subdev
);
struct
nvkm_device
*
device
=
mc
->
subdev
.
device
;
free_irq
(
mc
->
irq
,
mc
);
if
(
mc
->
use_msi
)
pci_disable_msi
(
device
->
pdev
);
return
mc
;
return
nvkm_mc
(
subdev
);
}
static
const
struct
nvkm_subdev_func
nvkm_mc
=
{
.
dtor
=
nvkm_mc_dtor
,
.
oneinit
=
nvkm_mc_oneinit
,
.
init
=
nvkm_mc_init
,
.
fini
=
nvkm_mc_fini
,
};
...
...
@@ -137,48 +113,11 @@ nvkm_mc_new_(const struct nvkm_mc_func *func, struct nvkm_device *device,
int
index
,
struct
nvkm_mc
**
pmc
)
{
struct
nvkm_mc
*
mc
;
int
ret
;
if
(
!
(
mc
=
*
pmc
=
kzalloc
(
sizeof
(
*
mc
),
GFP_KERNEL
)))
return
-
ENOMEM
;
nvkm_subdev_ctor
(
&
nvkm_mc
,
device
,
index
,
0
,
&
mc
->
subdev
);
mc
->
func
=
func
;
if
(
nv_device_is_pci
(
device
))
{
switch
(
device
->
pdev
->
device
&
0x0ff0
)
{
case
0x00f0
:
case
0x02e0
:
/* BR02? NFI how these would be handled yet exactly */
break
;
default:
switch
(
device
->
chipset
)
{
case
0xaa
:
/* reported broken, nv also disable it */
break
;
default:
mc
->
use_msi
=
true
;
break
;
}
}
mc
->
use_msi
=
nvkm_boolopt
(
device
->
cfgopt
,
"NvMSI"
,
mc
->
use_msi
);
if
(
mc
->
use_msi
&&
mc
->
func
->
msi_rearm
)
{
mc
->
use_msi
=
pci_enable_msi
(
device
->
pdev
)
==
0
;
if
(
mc
->
use_msi
)
{
nvkm_debug
(
&
mc
->
subdev
,
"MSI enabled
\n
"
);
mc
->
func
->
msi_rearm
(
mc
);
}
}
else
{
mc
->
use_msi
=
false
;
}
}
ret
=
nv_device_get_irq
(
device
,
true
);
if
(
ret
<
0
)
return
ret
;
mc
->
irq
=
ret
;
return
0
;
}
drivers/gpu/drm/nouveau/nvkm/subdev/mc/g94.c
已删除
100644 → 0
浏览文件 @
ae0a5b2d
/*
* Copyright 2012 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
*/
#include "priv.h"
static
const
struct
nvkm_mc_func
g94_mc
=
{
.
init
=
nv50_mc_init
,
.
intr
=
nv50_mc_intr
,
.
intr_unarm
=
nv04_mc_intr_unarm
,
.
intr_rearm
=
nv04_mc_intr_rearm
,
.
intr_mask
=
nv04_mc_intr_mask
,
.
msi_rearm
=
nv40_mc_msi_rearm
,
};
int
g94_mc_new
(
struct
nvkm_device
*
device
,
int
index
,
struct
nvkm_mc
**
pmc
)
{
return
nvkm_mc_new_
(
&
g94_mc
,
device
,
index
,
pmc
);
}
drivers/gpu/drm/nouveau/nvkm/subdev/mc/g98.c
浏览文件 @
2b700825
...
...
@@ -51,7 +51,6 @@ g98_mc = {
.
intr_unarm
=
nv04_mc_intr_unarm
,
.
intr_rearm
=
nv04_mc_intr_rearm
,
.
intr_mask
=
nv04_mc_intr_mask
,
.
msi_rearm
=
nv40_mc_msi_rearm
,
};
int
...
...
drivers/gpu/drm/nouveau/nvkm/subdev/mc/gf100.c
浏览文件 @
2b700825
...
...
@@ -74,12 +74,6 @@ gf100_mc_intr_mask(struct nvkm_mc *mc)
return
intr0
|
intr1
;
}
static
void
gf100_mc_msi_rearm
(
struct
nvkm_mc
*
mc
)
{
nvkm_wr32
(
mc
->
subdev
.
device
,
0x088704
,
0x00000000
);
}
void
gf100_mc_unk260
(
struct
nvkm_mc
*
mc
,
u32
data
)
{
...
...
@@ -93,7 +87,6 @@ gf100_mc = {
.
intr_unarm
=
gf100_mc_intr_unarm
,
.
intr_rearm
=
gf100_mc_intr_rearm
,
.
intr_mask
=
gf100_mc_intr_mask
,
.
msi_rearm
=
gf100_mc_msi_rearm
,
.
unk260
=
gf100_mc_unk260
,
};
...
...
drivers/gpu/drm/nouveau/nvkm/subdev/mc/gf106.c
已删除
100644 → 0
浏览文件 @
ae0a5b2d
/*
* Copyright 2012 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
*/
#include "priv.h"
static
const
struct
nvkm_mc_func
gf106_mc
=
{
.
init
=
nv50_mc_init
,
.
intr
=
gf100_mc_intr
,
.
intr_unarm
=
gf100_mc_intr_unarm
,
.
intr_rearm
=
gf100_mc_intr_rearm
,
.
intr_mask
=
gf100_mc_intr_mask
,
.
msi_rearm
=
nv40_mc_msi_rearm
,
.
unk260
=
gf100_mc_unk260
,
};
int
gf106_mc_new
(
struct
nvkm_device
*
device
,
int
index
,
struct
nvkm_mc
**
pmc
)
{
return
nvkm_mc_new_
(
&
gf106_mc
,
device
,
index
,
pmc
);
}
drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk20a.c
浏览文件 @
2b700825
...
...
@@ -30,7 +30,6 @@ gk20a_mc = {
.
intr_unarm
=
gf100_mc_intr_unarm
,
.
intr_rearm
=
gf100_mc_intr_rearm
,
.
intr_mask
=
gf100_mc_intr_mask
,
.
msi_rearm
=
nv40_mc_msi_rearm
,
};
int
...
...
drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv40.c
已删除
100644 → 0
浏览文件 @
ae0a5b2d
/*
* Copyright 2012 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
*/
#include "priv.h"
void
nv40_mc_msi_rearm
(
struct
nvkm_mc
*
mc
)
{
nvkm_wr08
(
mc
->
subdev
.
device
,
0x088068
,
0xff
);
}
static
const
struct
nvkm_mc_func
nv40_mc
=
{
.
init
=
nv04_mc_init
,
.
intr
=
nv04_mc_intr
,
.
intr_unarm
=
nv04_mc_intr_unarm
,
.
intr_rearm
=
nv04_mc_intr_rearm
,
.
intr_mask
=
nv04_mc_intr_mask
,
.
msi_rearm
=
nv40_mc_msi_rearm
,
};
int
nv40_mc_new
(
struct
nvkm_device
*
device
,
int
index
,
struct
nvkm_mc
**
pmc
)
{
return
nvkm_mc_new_
(
&
nv40_mc
,
device
,
index
,
pmc
);
}
drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv44.c
浏览文件 @
2b700825
...
...
@@ -44,7 +44,6 @@ nv44_mc = {
.
intr_unarm
=
nv04_mc_intr_unarm
,
.
intr_rearm
=
nv04_mc_intr_rearm
,
.
intr_mask
=
nv04_mc_intr_mask
,
.
msi_rearm
=
nv40_mc_msi_rearm
,
};
int
...
...
drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv4c.c
已删除
100644 → 0
浏览文件 @
ae0a5b2d
/*
* Copyright 2014 Ilia Mirkin
*
* 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: Ilia Mirkin
*/
#include "priv.h"
static
const
struct
nvkm_mc_func
nv4c_mc
=
{
.
init
=
nv44_mc_init
,
.
intr
=
nv04_mc_intr
,
.
intr_unarm
=
nv04_mc_intr_unarm
,
.
intr_rearm
=
nv04_mc_intr_rearm
,
.
intr_mask
=
nv04_mc_intr_mask
,
};
int
nv4c_mc_new
(
struct
nvkm_device
*
device
,
int
index
,
struct
nvkm_mc
**
pmc
)
{
return
nvkm_mc_new_
(
&
nv4c_mc
,
device
,
index
,
pmc
);
}
drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv50.c
浏览文件 @
2b700825
...
...
@@ -41,13 +41,6 @@ nv50_mc_intr[] = {
{},
};
static
void
nv50_mc_msi_rearm
(
struct
nvkm_mc
*
mc
)
{
struct
nvkm_device
*
device
=
mc
->
subdev
.
device
;
pci_write_config_byte
(
device
->
pdev
,
0x68
,
0xff
);
}
void
nv50_mc_init
(
struct
nvkm_mc
*
mc
)
{
...
...
@@ -62,7 +55,6 @@ nv50_mc = {
.
intr_unarm
=
nv04_mc_intr_unarm
,
.
intr_rearm
=
nv04_mc_intr_rearm
,
.
intr_mask
=
nv04_mc_intr_mask
,
.
msi_rearm
=
nv50_mc_msi_rearm
,
};
int
...
...
drivers/gpu/drm/nouveau/nvkm/subdev/mc/priv.h
浏览文件 @
2b700825
...
...
@@ -20,7 +20,6 @@ struct nvkm_mc_func {
void
(
*
intr_rearm
)(
struct
nvkm_mc
*
);
/* retrieve pending interrupt mask (NV_PMC_INTR) */
u32
(
*
intr_mask
)(
struct
nvkm_mc
*
);
void
(
*
msi_rearm
)(
struct
nvkm_mc
*
);
void
(
*
unk260
)(
struct
nvkm_mc
*
,
u32
);
};
...
...
@@ -30,8 +29,6 @@ void nv04_mc_intr_unarm(struct nvkm_mc *);
void
nv04_mc_intr_rearm
(
struct
nvkm_mc
*
);
u32
nv04_mc_intr_mask
(
struct
nvkm_mc
*
);
void
nv40_mc_msi_rearm
(
struct
nvkm_mc
*
);
void
nv44_mc_init
(
struct
nvkm_mc
*
);
void
nv50_mc_init
(
struct
nvkm_mc
*
);
...
...
drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c
浏览文件 @
2b700825
...
...
@@ -23,6 +23,10 @@
*/
#include "priv.h"
#include <core/option.h>
#include <core/pci.h>
#include <subdev/mc.h>
u32
nvkm_pci_rd32
(
struct
nvkm_pci
*
pci
,
u16
addr
)
{
...
...
@@ -52,21 +56,62 @@ nvkm_pci_rom_shadow(struct nvkm_pci *pci, bool shadow)
nvkm_pci_wr32
(
pci
,
0x0050
,
data
);
}
void
nvkm_pci_
msi_rearm
(
struct
nvkm_pci
*
pci
)
static
irqreturn_t
nvkm_pci_
intr
(
int
irq
,
void
*
arg
)
{
struct
nvkm_pci
*
pci
=
arg
;
struct
nvkm_mc
*
mc
=
pci
->
subdev
.
device
->
mc
;
bool
handled
=
false
;
if
(
likely
(
mc
))
{
nvkm_mc_intr_unarm
(
mc
);
if
(
pci
->
msi
)
pci
->
func
->
msi_rearm
(
pci
);
nvkm_mc_intr
(
mc
,
&
handled
);
nvkm_mc_intr_rearm
(
mc
);
}
return
handled
?
IRQ_HANDLED
:
IRQ_NONE
;
}
static
int
nvkm_pci_fini
(
struct
nvkm_subdev
*
subdev
,
bool
suspend
)
{
struct
nvkm_pci
*
pci
=
nvkm_pci
(
subdev
);
if
(
pci
->
irq
>=
0
)
{
free_irq
(
pci
->
irq
,
pci
);
pci
->
irq
=
-
1
;
};
return
0
;
}
static
int
nvkm_pci_init
(
struct
nvkm_subdev
*
subdev
)
{
struct
nvkm_pci
*
pci
=
nvkm_pci
(
subdev
);
struct
pci_dev
*
pdev
=
pci
->
pdev
;
int
ret
;
ret
=
request_irq
(
pdev
->
irq
,
nvkm_pci_intr
,
IRQF_SHARED
,
"nvkm"
,
pci
);
if
(
ret
)
return
ret
;
pci
->
irq
=
pdev
->
irq
;
return
ret
;
}
static
void
*
nvkm_pci_dtor
(
struct
nvkm_subdev
*
subdev
)
{
struct
nvkm_pci
*
pci
=
nvkm_pci
(
subdev
);
if
(
pci
->
msi
)
pci_disable_msi
(
pci
->
pdev
);
return
nvkm_pci
(
subdev
);
}
static
const
struct
nvkm_subdev_func
nvkm_pci_func
=
{
.
dtor
=
nvkm_pci_dtor
,
.
init
=
nvkm_pci_init
,
.
fini
=
nvkm_pci_fini
,
};
int
...
...
@@ -74,9 +119,38 @@ nvkm_pci_new_(const struct nvkm_pci_func *func, struct nvkm_device *device,
int
index
,
struct
nvkm_pci
**
ppci
)
{
struct
nvkm_pci
*
pci
;
if
(
!
(
pci
=
*
ppci
=
kzalloc
(
sizeof
(
**
ppci
),
GFP_KERNEL
)))
return
-
ENOMEM
;
nvkm_subdev_ctor
(
&
nvkm_pci_func
,
device
,
index
,
0
,
&
pci
->
subdev
);
pci
->
func
=
func
;
pci
->
pdev
=
device
->
func
->
pci
(
device
)
->
pdev
;
pci
->
irq
=
-
1
;
switch
(
pci
->
pdev
->
device
&
0x0ff0
)
{
case
0x00f0
:
case
0x02e0
:
/* BR02? NFI how these would be handled yet exactly */
break
;
default:
switch
(
device
->
chipset
)
{
case
0xaa
:
/* reported broken, nv also disable it */
break
;
default:
pci
->
msi
=
true
;
break
;
}
}
pci
->
msi
=
nvkm_boolopt
(
device
->
cfgopt
,
"NvMSI"
,
pci
->
msi
);
if
(
pci
->
msi
&&
func
->
msi_rearm
)
{
pci
->
msi
=
pci_enable_msi
(
pci
->
pdev
)
==
0
;
if
(
pci
->
msi
)
nvkm_debug
(
&
pci
->
subdev
,
"MSI enabled
\n
"
);
}
else
{
pci
->
msi
=
false
;
}
return
0
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录