Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
bee4d4ac
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 4 年多
通知
15
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
bee4d4ac
编写于
6月 29, 2011
作者:
K
Keith Packard
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'drm-intel-fixes' into drm-intel-next
上级
e489bda4
f71d4af4
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
70 addition
and
94 deletion
+70
-94
drivers/gpu/drm/i915/i915_dma.c
drivers/gpu/drm/i915/i915_dma.c
+1
-30
drivers/gpu/drm/i915/i915_drv.c
drivers/gpu/drm/i915/i915_drv.c
+0
-8
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/i915_drv.h
+1
-29
drivers/gpu/drm/i915/i915_irq.c
drivers/gpu/drm/i915/i915_irq.c
+58
-20
drivers/gpu/drm/i915/intel_overlay.c
drivers/gpu/drm/i915/intel_overlay.c
+10
-7
未找到文件。
drivers/gpu/drm/i915/i915_dma.c
浏览文件 @
bee4d4ac
...
@@ -1266,30 +1266,6 @@ static int i915_load_modeset_init(struct drm_device *dev)
...
@@ -1266,30 +1266,6 @@ static int i915_load_modeset_init(struct drm_device *dev)
intel_modeset_gem_init
(
dev
);
intel_modeset_gem_init
(
dev
);
if
(
IS_IVYBRIDGE
(
dev
))
{
/* Share pre & uninstall handlers with ILK/SNB */
dev
->
driver
->
irq_handler
=
ivybridge_irq_handler
;
dev
->
driver
->
irq_preinstall
=
ironlake_irq_preinstall
;
dev
->
driver
->
irq_postinstall
=
ivybridge_irq_postinstall
;
dev
->
driver
->
irq_uninstall
=
ironlake_irq_uninstall
;
dev
->
driver
->
enable_vblank
=
ivybridge_enable_vblank
;
dev
->
driver
->
disable_vblank
=
ivybridge_disable_vblank
;
}
else
if
(
HAS_PCH_SPLIT
(
dev
))
{
dev
->
driver
->
irq_handler
=
ironlake_irq_handler
;
dev
->
driver
->
irq_preinstall
=
ironlake_irq_preinstall
;
dev
->
driver
->
irq_postinstall
=
ironlake_irq_postinstall
;
dev
->
driver
->
irq_uninstall
=
ironlake_irq_uninstall
;
dev
->
driver
->
enable_vblank
=
ironlake_enable_vblank
;
dev
->
driver
->
disable_vblank
=
ironlake_disable_vblank
;
}
else
{
dev
->
driver
->
irq_preinstall
=
i915_driver_irq_preinstall
;
dev
->
driver
->
irq_postinstall
=
i915_driver_irq_postinstall
;
dev
->
driver
->
irq_uninstall
=
i915_driver_irq_uninstall
;
dev
->
driver
->
irq_handler
=
i915_driver_irq_handler
;
dev
->
driver
->
enable_vblank
=
i915_enable_vblank
;
dev
->
driver
->
disable_vblank
=
i915_disable_vblank
;
}
ret
=
drm_irq_install
(
dev
);
ret
=
drm_irq_install
(
dev
);
if
(
ret
)
if
(
ret
)
goto
cleanup_gem
;
goto
cleanup_gem
;
...
@@ -2017,12 +1993,7 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
...
@@ -2017,12 +1993,7 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
/* enable GEM by default */
/* enable GEM by default */
dev_priv
->
has_gem
=
1
;
dev_priv
->
has_gem
=
1
;
dev
->
driver
->
get_vblank_counter
=
i915_get_vblank_counter
;
intel_irq_init
(
dev
);
dev
->
max_vblank_count
=
0xffffff
;
/* only 24 bits of frame count */
if
(
IS_G4X
(
dev
)
||
IS_GEN5
(
dev
)
||
IS_GEN6
(
dev
)
||
IS_IVYBRIDGE
(
dev
))
{
dev
->
max_vblank_count
=
0xffffffff
;
/* full 32 bit counter */
dev
->
driver
->
get_vblank_counter
=
gm45_get_vblank_counter
;
}
/* Try to make sure MCHBAR is enabled before poking at it */
/* Try to make sure MCHBAR is enabled before poking at it */
intel_setup_mchbar
(
dev
);
intel_setup_mchbar
(
dev
);
...
...
drivers/gpu/drm/i915/i915_drv.c
浏览文件 @
bee4d4ac
...
@@ -768,14 +768,6 @@ static struct drm_driver driver = {
...
@@ -768,14 +768,6 @@ static struct drm_driver driver = {
.
resume
=
i915_resume
,
.
resume
=
i915_resume
,
.
device_is_agp
=
i915_driver_device_is_agp
,
.
device_is_agp
=
i915_driver_device_is_agp
,
.
enable_vblank
=
i915_enable_vblank
,
.
disable_vblank
=
i915_disable_vblank
,
.
get_vblank_timestamp
=
i915_get_vblank_timestamp
,
.
get_scanout_position
=
i915_get_crtc_scanoutpos
,
.
irq_preinstall
=
i915_driver_irq_preinstall
,
.
irq_postinstall
=
i915_driver_irq_postinstall
,
.
irq_uninstall
=
i915_driver_irq_uninstall
,
.
irq_handler
=
i915_driver_irq_handler
,
.
reclaim_buffers
=
drm_core_reclaim_buffers
,
.
reclaim_buffers
=
drm_core_reclaim_buffers
,
.
master_create
=
i915_master_create
,
.
master_create
=
i915_master_create
,
.
master_destroy
=
i915_master_destroy
,
.
master_destroy
=
i915_master_destroy
,
...
...
drivers/gpu/drm/i915/i915_drv.h
浏览文件 @
bee4d4ac
...
@@ -1032,33 +1032,12 @@ extern int i915_irq_emit(struct drm_device *dev, void *data,
...
@@ -1032,33 +1032,12 @@ extern int i915_irq_emit(struct drm_device *dev, void *data,
extern
int
i915_irq_wait
(
struct
drm_device
*
dev
,
void
*
data
,
extern
int
i915_irq_wait
(
struct
drm_device
*
dev
,
void
*
data
,
struct
drm_file
*
file_priv
);
struct
drm_file
*
file_priv
);
extern
irqreturn_t
i915_driver_irq_handler
(
DRM_IRQ_ARGS
);
extern
void
intel_irq_init
(
struct
drm_device
*
dev
);
extern
void
i915_driver_irq_preinstall
(
struct
drm_device
*
dev
);
extern
int
i915_driver_irq_postinstall
(
struct
drm_device
*
dev
);
extern
void
i915_driver_irq_uninstall
(
struct
drm_device
*
dev
);
extern
irqreturn_t
ironlake_irq_handler
(
DRM_IRQ_ARGS
);
extern
void
ironlake_irq_preinstall
(
struct
drm_device
*
dev
);
extern
int
ironlake_irq_postinstall
(
struct
drm_device
*
dev
);
extern
void
ironlake_irq_uninstall
(
struct
drm_device
*
dev
);
extern
irqreturn_t
ivybridge_irq_handler
(
DRM_IRQ_ARGS
);
extern
void
ivybridge_irq_preinstall
(
struct
drm_device
*
dev
);
extern
int
ivybridge_irq_postinstall
(
struct
drm_device
*
dev
);
extern
void
ivybridge_irq_uninstall
(
struct
drm_device
*
dev
);
extern
int
i915_vblank_pipe_set
(
struct
drm_device
*
dev
,
void
*
data
,
extern
int
i915_vblank_pipe_set
(
struct
drm_device
*
dev
,
void
*
data
,
struct
drm_file
*
file_priv
);
struct
drm_file
*
file_priv
);
extern
int
i915_vblank_pipe_get
(
struct
drm_device
*
dev
,
void
*
data
,
extern
int
i915_vblank_pipe_get
(
struct
drm_device
*
dev
,
void
*
data
,
struct
drm_file
*
file_priv
);
struct
drm_file
*
file_priv
);
extern
int
i915_enable_vblank
(
struct
drm_device
*
dev
,
int
crtc
);
extern
void
i915_disable_vblank
(
struct
drm_device
*
dev
,
int
crtc
);
extern
int
ironlake_enable_vblank
(
struct
drm_device
*
dev
,
int
crtc
);
extern
void
ironlake_disable_vblank
(
struct
drm_device
*
dev
,
int
crtc
);
extern
int
ivybridge_enable_vblank
(
struct
drm_device
*
dev
,
int
crtc
);
extern
void
ivybridge_disable_vblank
(
struct
drm_device
*
dev
,
int
crtc
);
extern
u32
i915_get_vblank_counter
(
struct
drm_device
*
dev
,
int
crtc
);
extern
u32
gm45_get_vblank_counter
(
struct
drm_device
*
dev
,
int
crtc
);
extern
int
i915_vblank_swap
(
struct
drm_device
*
dev
,
void
*
data
,
extern
int
i915_vblank_swap
(
struct
drm_device
*
dev
,
void
*
data
,
struct
drm_file
*
file_priv
);
struct
drm_file
*
file_priv
);
...
@@ -1069,13 +1048,6 @@ void
...
@@ -1069,13 +1048,6 @@ void
i915_disable_pipestat
(
drm_i915_private_t
*
dev_priv
,
int
pipe
,
u32
mask
);
i915_disable_pipestat
(
drm_i915_private_t
*
dev_priv
,
int
pipe
,
u32
mask
);
void
intel_enable_asle
(
struct
drm_device
*
dev
);
void
intel_enable_asle
(
struct
drm_device
*
dev
);
int
i915_get_vblank_timestamp
(
struct
drm_device
*
dev
,
int
crtc
,
int
*
max_error
,
struct
timeval
*
vblank_time
,
unsigned
flags
);
int
i915_get_crtc_scanoutpos
(
struct
drm_device
*
dev
,
int
pipe
,
int
*
vpos
,
int
*
hpos
);
#ifdef CONFIG_DEBUG_FS
#ifdef CONFIG_DEBUG_FS
extern
void
i915_destroy_error_state
(
struct
drm_device
*
dev
);
extern
void
i915_destroy_error_state
(
struct
drm_device
*
dev
);
...
...
drivers/gpu/drm/i915/i915_irq.c
浏览文件 @
bee4d4ac
...
@@ -152,7 +152,7 @@ i915_pipe_enabled(struct drm_device *dev, int pipe)
...
@@ -152,7 +152,7 @@ i915_pipe_enabled(struct drm_device *dev, int pipe)
/* Called from drm generic code, passed a 'crtc', which
/* Called from drm generic code, passed a 'crtc', which
* we use as a pipe index
* we use as a pipe index
*/
*/
u32
i915_get_vblank_counter
(
struct
drm_device
*
dev
,
int
pipe
)
static
u32
i915_get_vblank_counter
(
struct
drm_device
*
dev
,
int
pipe
)
{
{
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
unsigned
long
high_frame
;
unsigned
long
high_frame
;
...
@@ -184,7 +184,7 @@ u32 i915_get_vblank_counter(struct drm_device *dev, int pipe)
...
@@ -184,7 +184,7 @@ u32 i915_get_vblank_counter(struct drm_device *dev, int pipe)
return
(
high1
<<
8
)
|
low
;
return
(
high1
<<
8
)
|
low
;
}
}
u32
gm45_get_vblank_counter
(
struct
drm_device
*
dev
,
int
pipe
)
static
u32
gm45_get_vblank_counter
(
struct
drm_device
*
dev
,
int
pipe
)
{
{
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
int
reg
=
PIPE_FRMCOUNT_GM45
(
pipe
);
int
reg
=
PIPE_FRMCOUNT_GM45
(
pipe
);
...
@@ -198,7 +198,7 @@ u32 gm45_get_vblank_counter(struct drm_device *dev, int pipe)
...
@@ -198,7 +198,7 @@ u32 gm45_get_vblank_counter(struct drm_device *dev, int pipe)
return
I915_READ
(
reg
);
return
I915_READ
(
reg
);
}
}
int
i915_get_crtc_scanoutpos
(
struct
drm_device
*
dev
,
int
pipe
,
static
int
i915_get_crtc_scanoutpos
(
struct
drm_device
*
dev
,
int
pipe
,
int
*
vpos
,
int
*
hpos
)
int
*
vpos
,
int
*
hpos
)
{
{
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
...
@@ -264,7 +264,7 @@ int i915_get_crtc_scanoutpos(struct drm_device *dev, int pipe,
...
@@ -264,7 +264,7 @@ int i915_get_crtc_scanoutpos(struct drm_device *dev, int pipe,
return
ret
;
return
ret
;
}
}
int
i915_get_vblank_timestamp
(
struct
drm_device
*
dev
,
int
pipe
,
static
int
i915_get_vblank_timestamp
(
struct
drm_device
*
dev
,
int
pipe
,
int
*
max_error
,
int
*
max_error
,
struct
timeval
*
vblank_time
,
struct
timeval
*
vblank_time
,
unsigned
flags
)
unsigned
flags
)
...
@@ -464,7 +464,7 @@ static void pch_irq_handler(struct drm_device *dev)
...
@@ -464,7 +464,7 @@ static void pch_irq_handler(struct drm_device *dev)
DRM_DEBUG_DRIVER
(
"PCH transcoder A underrun interrupt
\n
"
);
DRM_DEBUG_DRIVER
(
"PCH transcoder A underrun interrupt
\n
"
);
}
}
irqreturn_t
ivybridge_irq_handler
(
DRM_IRQ_ARGS
)
static
irqreturn_t
ivybridge_irq_handler
(
DRM_IRQ_ARGS
)
{
{
struct
drm_device
*
dev
=
(
struct
drm_device
*
)
arg
;
struct
drm_device
*
dev
=
(
struct
drm_device
*
)
arg
;
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
...
@@ -552,7 +552,7 @@ irqreturn_t ivybridge_irq_handler(DRM_IRQ_ARGS)
...
@@ -552,7 +552,7 @@ irqreturn_t ivybridge_irq_handler(DRM_IRQ_ARGS)
return
ret
;
return
ret
;
}
}
irqreturn_t
ironlake_irq_handler
(
DRM_IRQ_ARGS
)
static
irqreturn_t
ironlake_irq_handler
(
DRM_IRQ_ARGS
)
{
{
struct
drm_device
*
dev
=
(
struct
drm_device
*
)
arg
;
struct
drm_device
*
dev
=
(
struct
drm_device
*
)
arg
;
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
...
@@ -1211,7 +1211,7 @@ static void i915_pageflip_stall_check(struct drm_device *dev, int pipe)
...
@@ -1211,7 +1211,7 @@ static void i915_pageflip_stall_check(struct drm_device *dev, int pipe)
}
}
}
}
irqreturn_t
i915_driver_irq_handler
(
DRM_IRQ_ARGS
)
static
irqreturn_t
i915_driver_irq_handler
(
DRM_IRQ_ARGS
)
{
{
struct
drm_device
*
dev
=
(
struct
drm_device
*
)
arg
;
struct
drm_device
*
dev
=
(
struct
drm_device
*
)
arg
;
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
...
@@ -1456,7 +1456,7 @@ int i915_irq_wait(struct drm_device *dev, void *data,
...
@@ -1456,7 +1456,7 @@ int i915_irq_wait(struct drm_device *dev, void *data,
/* Called from drm generic code, passed 'crtc' which
/* Called from drm generic code, passed 'crtc' which
* we use as a pipe index
* we use as a pipe index
*/
*/
int
i915_enable_vblank
(
struct
drm_device
*
dev
,
int
pipe
)
static
int
i915_enable_vblank
(
struct
drm_device
*
dev
,
int
pipe
)
{
{
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
unsigned
long
irqflags
;
unsigned
long
irqflags
;
...
@@ -1480,7 +1480,7 @@ int i915_enable_vblank(struct drm_device *dev, int pipe)
...
@@ -1480,7 +1480,7 @@ int i915_enable_vblank(struct drm_device *dev, int pipe)
return
0
;
return
0
;
}
}
int
ironlake_enable_vblank
(
struct
drm_device
*
dev
,
int
pipe
)
static
int
ironlake_enable_vblank
(
struct
drm_device
*
dev
,
int
pipe
)
{
{
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
unsigned
long
irqflags
;
unsigned
long
irqflags
;
...
@@ -1496,7 +1496,7 @@ int ironlake_enable_vblank(struct drm_device *dev, int pipe)
...
@@ -1496,7 +1496,7 @@ int ironlake_enable_vblank(struct drm_device *dev, int pipe)
return
0
;
return
0
;
}
}
int
ivybridge_enable_vblank
(
struct
drm_device
*
dev
,
int
pipe
)
static
int
ivybridge_enable_vblank
(
struct
drm_device
*
dev
,
int
pipe
)
{
{
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
unsigned
long
irqflags
;
unsigned
long
irqflags
;
...
@@ -1515,7 +1515,7 @@ int ivybridge_enable_vblank(struct drm_device *dev, int pipe)
...
@@ -1515,7 +1515,7 @@ int ivybridge_enable_vblank(struct drm_device *dev, int pipe)
/* Called from drm generic code, passed 'crtc' which
/* Called from drm generic code, passed 'crtc' which
* we use as a pipe index
* we use as a pipe index
*/
*/
void
i915_disable_vblank
(
struct
drm_device
*
dev
,
int
pipe
)
static
void
i915_disable_vblank
(
struct
drm_device
*
dev
,
int
pipe
)
{
{
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
unsigned
long
irqflags
;
unsigned
long
irqflags
;
...
@@ -1531,7 +1531,7 @@ void i915_disable_vblank(struct drm_device *dev, int pipe)
...
@@ -1531,7 +1531,7 @@ void i915_disable_vblank(struct drm_device *dev, int pipe)
spin_unlock_irqrestore
(
&
dev_priv
->
irq_lock
,
irqflags
);
spin_unlock_irqrestore
(
&
dev_priv
->
irq_lock
,
irqflags
);
}
}
void
ironlake_disable_vblank
(
struct
drm_device
*
dev
,
int
pipe
)
static
void
ironlake_disable_vblank
(
struct
drm_device
*
dev
,
int
pipe
)
{
{
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
unsigned
long
irqflags
;
unsigned
long
irqflags
;
...
@@ -1542,7 +1542,7 @@ void ironlake_disable_vblank(struct drm_device *dev, int pipe)
...
@@ -1542,7 +1542,7 @@ void ironlake_disable_vblank(struct drm_device *dev, int pipe)
spin_unlock_irqrestore
(
&
dev_priv
->
irq_lock
,
irqflags
);
spin_unlock_irqrestore
(
&
dev_priv
->
irq_lock
,
irqflags
);
}
}
void
ivybridge_disable_vblank
(
struct
drm_device
*
dev
,
int
pipe
)
static
void
ivybridge_disable_vblank
(
struct
drm_device
*
dev
,
int
pipe
)
{
{
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
unsigned
long
irqflags
;
unsigned
long
irqflags
;
...
@@ -1733,7 +1733,7 @@ void i915_hangcheck_elapsed(unsigned long data)
...
@@ -1733,7 +1733,7 @@ void i915_hangcheck_elapsed(unsigned long data)
/* drm_dma.h hooks
/* drm_dma.h hooks
*/
*/
void
ironlake_irq_preinstall
(
struct
drm_device
*
dev
)
static
void
ironlake_irq_preinstall
(
struct
drm_device
*
dev
)
{
{
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
...
@@ -1774,7 +1774,7 @@ void ironlake_irq_preinstall(struct drm_device *dev)
...
@@ -1774,7 +1774,7 @@ void ironlake_irq_preinstall(struct drm_device *dev)
POSTING_READ
(
SDEIER
);
POSTING_READ
(
SDEIER
);
}
}
int
ironlake_irq_postinstall
(
struct
drm_device
*
dev
)
static
int
ironlake_irq_postinstall
(
struct
drm_device
*
dev
)
{
{
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
/* enable kind of interrupts always enabled */
/* enable kind of interrupts always enabled */
...
@@ -1846,7 +1846,7 @@ int ironlake_irq_postinstall(struct drm_device *dev)
...
@@ -1846,7 +1846,7 @@ int ironlake_irq_postinstall(struct drm_device *dev)
return
0
;
return
0
;
}
}
int
ivybridge_irq_postinstall
(
struct
drm_device
*
dev
)
static
int
ivybridge_irq_postinstall
(
struct
drm_device
*
dev
)
{
{
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
/* enable kind of interrupts always enabled */
/* enable kind of interrupts always enabled */
...
@@ -1896,7 +1896,7 @@ int ivybridge_irq_postinstall(struct drm_device *dev)
...
@@ -1896,7 +1896,7 @@ int ivybridge_irq_postinstall(struct drm_device *dev)
return
0
;
return
0
;
}
}
void
i915_driver_irq_preinstall
(
struct
drm_device
*
dev
)
static
void
i915_driver_irq_preinstall
(
struct
drm_device
*
dev
)
{
{
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
int
pipe
;
int
pipe
;
...
@@ -1923,7 +1923,7 @@ void i915_driver_irq_preinstall(struct drm_device * dev)
...
@@ -1923,7 +1923,7 @@ void i915_driver_irq_preinstall(struct drm_device * dev)
* Must be called after intel_modeset_init or hotplug interrupts won't be
* Must be called after intel_modeset_init or hotplug interrupts won't be
* enabled correctly.
* enabled correctly.
*/
*/
int
i915_driver_irq_postinstall
(
struct
drm_device
*
dev
)
static
int
i915_driver_irq_postinstall
(
struct
drm_device
*
dev
)
{
{
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
u32
enable_mask
=
I915_INTERRUPT_ENABLE_FIX
|
I915_INTERRUPT_ENABLE_VAR
;
u32
enable_mask
=
I915_INTERRUPT_ENABLE_FIX
|
I915_INTERRUPT_ENABLE_VAR
;
...
@@ -1999,7 +1999,7 @@ int i915_driver_irq_postinstall(struct drm_device *dev)
...
@@ -1999,7 +1999,7 @@ int i915_driver_irq_postinstall(struct drm_device *dev)
return
0
;
return
0
;
}
}
void
ironlake_irq_uninstall
(
struct
drm_device
*
dev
)
static
void
ironlake_irq_uninstall
(
struct
drm_device
*
dev
)
{
{
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
...
@@ -2019,7 +2019,7 @@ void ironlake_irq_uninstall(struct drm_device *dev)
...
@@ -2019,7 +2019,7 @@ void ironlake_irq_uninstall(struct drm_device *dev)
I915_WRITE
(
GTIIR
,
I915_READ
(
GTIIR
));
I915_WRITE
(
GTIIR
,
I915_READ
(
GTIIR
));
}
}
void
i915_driver_irq_uninstall
(
struct
drm_device
*
dev
)
static
void
i915_driver_irq_uninstall
(
struct
drm_device
*
dev
)
{
{
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
drm_i915_private_t
*
dev_priv
=
(
drm_i915_private_t
*
)
dev
->
dev_private
;
int
pipe
;
int
pipe
;
...
@@ -2045,3 +2045,41 @@ void i915_driver_irq_uninstall(struct drm_device * dev)
...
@@ -2045,3 +2045,41 @@ void i915_driver_irq_uninstall(struct drm_device * dev)
I915_READ
(
PIPESTAT
(
pipe
))
&
0x8000ffff
);
I915_READ
(
PIPESTAT
(
pipe
))
&
0x8000ffff
);
I915_WRITE
(
IIR
,
I915_READ
(
IIR
));
I915_WRITE
(
IIR
,
I915_READ
(
IIR
));
}
}
void
intel_irq_init
(
struct
drm_device
*
dev
)
{
dev
->
driver
->
get_vblank_counter
=
i915_get_vblank_counter
;
dev
->
max_vblank_count
=
0xffffff
;
/* only 24 bits of frame count */
if
(
IS_G4X
(
dev
)
||
IS_GEN5
(
dev
)
||
IS_GEN6
(
dev
)
||
IS_IVYBRIDGE
(
dev
))
{
dev
->
max_vblank_count
=
0xffffffff
;
/* full 32 bit counter */
dev
->
driver
->
get_vblank_counter
=
gm45_get_vblank_counter
;
}
dev
->
driver
->
get_vblank_timestamp
=
i915_get_vblank_timestamp
;
dev
->
driver
->
get_scanout_position
=
i915_get_crtc_scanoutpos
;
if
(
IS_IVYBRIDGE
(
dev
))
{
/* Share pre & uninstall handlers with ILK/SNB */
dev
->
driver
->
irq_handler
=
ivybridge_irq_handler
;
dev
->
driver
->
irq_preinstall
=
ironlake_irq_preinstall
;
dev
->
driver
->
irq_postinstall
=
ivybridge_irq_postinstall
;
dev
->
driver
->
irq_uninstall
=
ironlake_irq_uninstall
;
dev
->
driver
->
enable_vblank
=
ivybridge_enable_vblank
;
dev
->
driver
->
disable_vblank
=
ivybridge_disable_vblank
;
}
else
if
(
HAS_PCH_SPLIT
(
dev
))
{
dev
->
driver
->
irq_handler
=
ironlake_irq_handler
;
dev
->
driver
->
irq_preinstall
=
ironlake_irq_preinstall
;
dev
->
driver
->
irq_postinstall
=
ironlake_irq_postinstall
;
dev
->
driver
->
irq_uninstall
=
ironlake_irq_uninstall
;
dev
->
driver
->
enable_vblank
=
ironlake_enable_vblank
;
dev
->
driver
->
disable_vblank
=
ironlake_disable_vblank
;
}
else
{
dev
->
driver
->
irq_preinstall
=
i915_driver_irq_preinstall
;
dev
->
driver
->
irq_postinstall
=
i915_driver_irq_postinstall
;
dev
->
driver
->
irq_uninstall
=
i915_driver_irq_uninstall
;
dev
->
driver
->
irq_handler
=
i915_driver_irq_handler
;
dev
->
driver
->
enable_vblank
=
i915_enable_vblank
;
dev
->
driver
->
disable_vblank
=
i915_disable_vblank
;
}
}
drivers/gpu/drm/i915/intel_overlay.c
浏览文件 @
bee4d4ac
...
@@ -1405,6 +1405,11 @@ void intel_setup_overlay(struct drm_device *dev)
...
@@ -1405,6 +1405,11 @@ void intel_setup_overlay(struct drm_device *dev)
overlay
=
kzalloc
(
sizeof
(
struct
intel_overlay
),
GFP_KERNEL
);
overlay
=
kzalloc
(
sizeof
(
struct
intel_overlay
),
GFP_KERNEL
);
if
(
!
overlay
)
if
(
!
overlay
)
return
;
return
;
mutex_lock
(
&
dev
->
struct_mutex
);
if
(
WARN_ON
(
dev_priv
->
overlay
))
goto
out_free
;
overlay
->
dev
=
dev
;
overlay
->
dev
=
dev
;
reg_bo
=
i915_gem_alloc_object
(
dev
,
PAGE_SIZE
);
reg_bo
=
i915_gem_alloc_object
(
dev
,
PAGE_SIZE
);
...
@@ -1412,8 +1417,6 @@ void intel_setup_overlay(struct drm_device *dev)
...
@@ -1412,8 +1417,6 @@ void intel_setup_overlay(struct drm_device *dev)
goto
out_free
;
goto
out_free
;
overlay
->
reg_bo
=
reg_bo
;
overlay
->
reg_bo
=
reg_bo
;
mutex_lock
(
&
dev
->
struct_mutex
);
if
(
OVERLAY_NEEDS_PHYSICAL
(
dev
))
{
if
(
OVERLAY_NEEDS_PHYSICAL
(
dev
))
{
ret
=
i915_gem_attach_phys_object
(
dev
,
reg_bo
,
ret
=
i915_gem_attach_phys_object
(
dev
,
reg_bo
,
I915_GEM_PHYS_OVERLAY_REGS
,
I915_GEM_PHYS_OVERLAY_REGS
,
...
@@ -1438,8 +1441,6 @@ void intel_setup_overlay(struct drm_device *dev)
...
@@ -1438,8 +1441,6 @@ void intel_setup_overlay(struct drm_device *dev)
}
}
}
}
mutex_unlock
(
&
dev
->
struct_mutex
);
/* init all values */
/* init all values */
overlay
->
color_key
=
0x0101fe
;
overlay
->
color_key
=
0x0101fe
;
overlay
->
brightness
=
-
19
;
overlay
->
brightness
=
-
19
;
...
@@ -1448,7 +1449,7 @@ void intel_setup_overlay(struct drm_device *dev)
...
@@ -1448,7 +1449,7 @@ void intel_setup_overlay(struct drm_device *dev)
regs
=
intel_overlay_map_regs
(
overlay
);
regs
=
intel_overlay_map_regs
(
overlay
);
if
(
!
regs
)
if
(
!
regs
)
goto
out_
free
_bo
;
goto
out_
unpin
_bo
;
memset
(
regs
,
0
,
sizeof
(
struct
overlay_registers
));
memset
(
regs
,
0
,
sizeof
(
struct
overlay_registers
));
update_polyphase_filter
(
regs
);
update_polyphase_filter
(
regs
);
...
@@ -1457,15 +1458,17 @@ void intel_setup_overlay(struct drm_device *dev)
...
@@ -1457,15 +1458,17 @@ void intel_setup_overlay(struct drm_device *dev)
intel_overlay_unmap_regs
(
overlay
,
regs
);
intel_overlay_unmap_regs
(
overlay
,
regs
);
dev_priv
->
overlay
=
overlay
;
dev_priv
->
overlay
=
overlay
;
mutex_unlock
(
&
dev
->
struct_mutex
);
DRM_INFO
(
"initialized overlay support
\n
"
);
DRM_INFO
(
"initialized overlay support
\n
"
);
return
;
return
;
out_unpin_bo:
out_unpin_bo:
i915_gem_object_unpin
(
reg_bo
);
if
(
!
OVERLAY_NEEDS_PHYSICAL
(
dev
))
i915_gem_object_unpin
(
reg_bo
);
out_free_bo:
out_free_bo:
drm_gem_object_unreference
(
&
reg_bo
->
base
);
drm_gem_object_unreference
(
&
reg_bo
->
base
);
mutex_unlock
(
&
dev
->
struct_mutex
);
out_free:
out_free:
mutex_unlock
(
&
dev
->
struct_mutex
);
kfree
(
overlay
);
kfree
(
overlay
);
return
;
return
;
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录