Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
7f8036b7
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
160
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
7f8036b7
编写于
12月 07, 2016
作者:
R
Rob Clark
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/msm: let gpu wire up it's own fault handler
Signed-off-by:
N
Rob Clark
<
robdclark@gmail.com
>
上级
720c3bb8
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
31 addition
and
2 deletion
+31
-2
drivers/gpu/drm/msm/adreno/a5xx_gpu.c
drivers/gpu/drm/msm/adreno/a5xx_gpu.c
+17
-0
drivers/gpu/drm/msm/msm_iommu.c
drivers/gpu/drm/msm/msm_iommu.c
+5
-2
drivers/gpu/drm/msm/msm_mmu.h
drivers/gpu/drm/msm/msm_mmu.h
+9
-0
未找到文件。
drivers/gpu/drm/msm/adreno/a5xx_gpu.c
浏览文件 @
7f8036b7
...
...
@@ -12,6 +12,7 @@
*/
#include "msm_gem.h"
#include "msm_mmu.h"
#include "a5xx_gpu.h"
extern
bool
hang_debug
;
...
...
@@ -573,6 +574,19 @@ static bool a5xx_idle(struct msm_gpu *gpu)
return
true
;
}
static
int
a5xx_fault_handler
(
void
*
arg
,
unsigned
long
iova
,
int
flags
)
{
struct
msm_gpu
*
gpu
=
arg
;
pr_warn_ratelimited
(
"*** gpu fault: iova=%08lx, flags=%d (%u,%u,%u,%u)
\n
"
,
iova
,
flags
,
gpu_read
(
gpu
,
REG_A5XX_CP_SCRATCH_REG
(
4
)),
gpu_read
(
gpu
,
REG_A5XX_CP_SCRATCH_REG
(
5
)),
gpu_read
(
gpu
,
REG_A5XX_CP_SCRATCH_REG
(
6
)),
gpu_read
(
gpu
,
REG_A5XX_CP_SCRATCH_REG
(
7
)));
return
-
EFAULT
;
}
static
void
a5xx_cp_err_irq
(
struct
msm_gpu
*
gpu
)
{
u32
status
=
gpu_read
(
gpu
,
REG_A5XX_CP_INTERRUPT_STATUS
);
...
...
@@ -884,5 +898,8 @@ struct msm_gpu *a5xx_gpu_init(struct drm_device *dev)
return
ERR_PTR
(
ret
);
}
if
(
gpu
->
aspace
)
msm_mmu_set_fault_handler
(
gpu
->
aspace
->
mmu
,
gpu
,
a5xx_fault_handler
);
return
gpu
;
}
drivers/gpu/drm/msm/msm_iommu.c
浏览文件 @
7f8036b7
...
...
@@ -24,9 +24,12 @@ struct msm_iommu {
};
#define to_msm_iommu(x) container_of(x, struct msm_iommu, base)
static
int
msm_fault_handler
(
struct
iommu_domain
*
iommu
,
struct
device
*
dev
,
static
int
msm_fault_handler
(
struct
iommu_domain
*
domain
,
struct
device
*
dev
,
unsigned
long
iova
,
int
flags
,
void
*
arg
)
{
struct
msm_iommu
*
iommu
=
arg
;
if
(
iommu
->
base
.
handler
)
return
iommu
->
base
.
handler
(
iommu
->
base
.
arg
,
iova
,
flags
);
pr_warn_ratelimited
(
"*** fault: iova=%08lx, flags=%d
\n
"
,
iova
,
flags
);
return
0
;
}
...
...
@@ -136,7 +139,7 @@ struct msm_mmu *msm_iommu_new(struct device *dev, struct iommu_domain *domain)
iommu
->
domain
=
domain
;
msm_mmu_init
(
&
iommu
->
base
,
dev
,
&
funcs
);
iommu_set_fault_handler
(
domain
,
msm_fault_handler
,
dev
);
iommu_set_fault_handler
(
domain
,
msm_fault_handler
,
iommu
);
return
&
iommu
->
base
;
}
drivers/gpu/drm/msm/msm_mmu.h
浏览文件 @
7f8036b7
...
...
@@ -33,6 +33,8 @@ struct msm_mmu_funcs {
struct
msm_mmu
{
const
struct
msm_mmu_funcs
*
funcs
;
struct
device
*
dev
;
int
(
*
handler
)(
void
*
arg
,
unsigned
long
iova
,
int
flags
);
void
*
arg
;
};
static
inline
void
msm_mmu_init
(
struct
msm_mmu
*
mmu
,
struct
device
*
dev
,
...
...
@@ -45,4 +47,11 @@ static inline void msm_mmu_init(struct msm_mmu *mmu, struct device *dev,
struct
msm_mmu
*
msm_iommu_new
(
struct
device
*
dev
,
struct
iommu_domain
*
domain
);
struct
msm_mmu
*
msm_gpummu_new
(
struct
device
*
dev
,
struct
msm_gpu
*
gpu
);
static
inline
void
msm_mmu_set_fault_handler
(
struct
msm_mmu
*
mmu
,
void
*
arg
,
int
(
*
handler
)(
void
*
arg
,
unsigned
long
iova
,
int
flags
))
{
mmu
->
arg
=
arg
;
mmu
->
handler
=
handler
;
}
#endif
/* __MSM_MMU_H__ */
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录