Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
xcap
xcap-capability-linux
Commits
f20ce962
Commit
f20ce962
authored
Jul 08, 2011
by
Ben Skeggs
Browse files
drm/nvd0/disp: do modeset irq handling from tasklet
Signed-off-by:
Ben Skeggs
<
bskeggs@redhat.com
>
parent
3b6d83d1
Changes
1
Hide whitespace changes
Inline
Side-by-side
drivers/gpu/drm/nouveau/nvd0_display.c
View file @
f20ce962
...
...
@@ -44,9 +44,12 @@ struct nvd0_display {
dma_addr_t
handle
;
u32
*
ptr
;
}
evo
[
1
];
struct
tasklet_struct
tasklet
;
struct
{
struct
dcb_entry
*
dis
;
struct
dcb_entry
*
ena
;
u32
modeset
;
int
crtc
;
int
pclk
;
u16
cfg
;
...
...
@@ -1114,9 +1117,24 @@ ack:
nv_wr32
(
dev
,
0x6101d0
,
0x80000000
);
}
static
void
nvd0_display_bh
(
unsigned
long
data
)
{
struct
drm_device
*
dev
=
(
struct
drm_device
*
)
data
;
struct
nvd0_display
*
disp
=
nvd0_display
(
dev
);
if
(
disp
->
irq
.
modeset
&
0x00000001
)
nvd0_display_unk1_handler
(
dev
);
if
(
disp
->
irq
.
modeset
&
0x00000002
)
nvd0_display_unk2_handler
(
dev
);
if
(
disp
->
irq
.
modeset
&
0x00000004
)
nvd0_display_unk4_handler
(
dev
);
}
static
void
nvd0_display_intr
(
struct
drm_device
*
dev
)
{
struct
nvd0_display
*
disp
=
nvd0_display
(
dev
);
u32
intr
=
nv_rd32
(
dev
,
0x610088
);
if
(
intr
&
0x00000002
)
{
...
...
@@ -1141,14 +1159,10 @@ nvd0_display_intr(struct drm_device *dev)
u32
stat
=
nv_rd32
(
dev
,
0x6100ac
);
if
(
stat
&
0x00000007
)
{
nv_wr32
(
dev
,
0x6100ac
,
(
stat
&
0x00000007
));
disp
->
irq
.
modeset
=
stat
;
tasklet_schedule
(
&
disp
->
tasklet
);
if
(
stat
&
0x00000001
)
nvd0_display_unk1_handler
(
dev
);
if
(
stat
&
0x00000002
)
nvd0_display_unk2_handler
(
dev
);
if
(
stat
&
0x00000004
)
nvd0_display_unk4_handler
(
dev
);
nv_wr32
(
dev
,
0x6100ac
,
(
stat
&
0x00000007
));
stat
&=
~
0x00000007
;
}
...
...
@@ -1371,6 +1385,7 @@ nvd0_display_create(struct drm_device *dev)
}
/* setup interrupt handling */
tasklet_init
(
&
disp
->
tasklet
,
nvd0_display_bh
,
(
unsigned
long
)
dev
);
nouveau_irq_register
(
dev
,
26
,
nvd0_display_intr
);
/* hash table and dma objects for the memory areas we care about */
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment