diff options
author | Alex Deucher <alexdeucher@gmail.com> | 2010-04-23 17:57:27 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2010-05-18 04:21:12 -0400 |
commit | 49e02b7306cb7e01965fe5f41ba0f80085142f6e (patch) | |
tree | 6faaa8069fae9b4768d727274df94c2a5298b1b2 /drivers/gpu/drm/radeon/radeon_asic.c | |
parent | 58e21dff53b9063563e7bb5f5a795ab2d8f61dda (diff) |
drm/radeon/kms/pm: add additional asic callbacks
- pm_misc() - handles voltage, pcie lanes, and other non
clock related power mode settings. Currently disabled.
Needs further debugging
- pm_prepare() - disables crtc mem requests right now.
All memory clients need to be disabled when changing
memory clocks. This function can be expanded to include
disabling fb access as well.
- pm_finish() - enable active memory clients.
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_asic.c')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_asic.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c index 1053115ba652..1e6f17bf54fd 100644 --- a/drivers/gpu/drm/radeon/radeon_asic.c +++ b/drivers/gpu/drm/radeon/radeon_asic.c | |||
@@ -168,6 +168,9 @@ static struct radeon_asic r100_asic = { | |||
168 | .gui_idle = &r100_gui_idle, | 168 | .gui_idle = &r100_gui_idle, |
169 | .get_power_state = &r100_get_power_state, | 169 | .get_power_state = &r100_get_power_state, |
170 | .set_power_state = &r100_set_power_state, | 170 | .set_power_state = &r100_set_power_state, |
171 | .pm_misc = &r100_pm_misc, | ||
172 | .pm_prepare = &r100_pm_prepare, | ||
173 | .pm_finish = &r100_pm_finish, | ||
171 | }; | 174 | }; |
172 | 175 | ||
173 | static struct radeon_asic r200_asic = { | 176 | static struct radeon_asic r200_asic = { |
@@ -209,6 +212,9 @@ static struct radeon_asic r200_asic = { | |||
209 | .gui_idle = &r100_gui_idle, | 212 | .gui_idle = &r100_gui_idle, |
210 | .get_power_state = &r100_get_power_state, | 213 | .get_power_state = &r100_get_power_state, |
211 | .set_power_state = &r100_set_power_state, | 214 | .set_power_state = &r100_set_power_state, |
215 | .pm_misc = &r100_pm_misc, | ||
216 | .pm_prepare = &r100_pm_prepare, | ||
217 | .pm_finish = &r100_pm_finish, | ||
212 | }; | 218 | }; |
213 | 219 | ||
214 | static struct radeon_asic r300_asic = { | 220 | static struct radeon_asic r300_asic = { |
@@ -251,6 +257,9 @@ static struct radeon_asic r300_asic = { | |||
251 | .gui_idle = &r100_gui_idle, | 257 | .gui_idle = &r100_gui_idle, |
252 | .get_power_state = &r100_get_power_state, | 258 | .get_power_state = &r100_get_power_state, |
253 | .set_power_state = &r100_set_power_state, | 259 | .set_power_state = &r100_set_power_state, |
260 | .pm_misc = &r100_pm_misc, | ||
261 | .pm_prepare = &r100_pm_prepare, | ||
262 | .pm_finish = &r100_pm_finish, | ||
254 | }; | 263 | }; |
255 | 264 | ||
256 | static struct radeon_asic r300_asic_pcie = { | 265 | static struct radeon_asic r300_asic_pcie = { |
@@ -292,6 +301,9 @@ static struct radeon_asic r300_asic_pcie = { | |||
292 | .gui_idle = &r100_gui_idle, | 301 | .gui_idle = &r100_gui_idle, |
293 | .get_power_state = &r100_get_power_state, | 302 | .get_power_state = &r100_get_power_state, |
294 | .set_power_state = &r100_set_power_state, | 303 | .set_power_state = &r100_set_power_state, |
304 | .pm_misc = &r100_pm_misc, | ||
305 | .pm_prepare = &r100_pm_prepare, | ||
306 | .pm_finish = &r100_pm_finish, | ||
295 | }; | 307 | }; |
296 | 308 | ||
297 | static struct radeon_asic r420_asic = { | 309 | static struct radeon_asic r420_asic = { |
@@ -334,6 +346,9 @@ static struct radeon_asic r420_asic = { | |||
334 | .gui_idle = &r100_gui_idle, | 346 | .gui_idle = &r100_gui_idle, |
335 | .get_power_state = &r100_get_power_state, | 347 | .get_power_state = &r100_get_power_state, |
336 | .set_power_state = &r100_set_power_state, | 348 | .set_power_state = &r100_set_power_state, |
349 | .pm_misc = &r100_pm_misc, | ||
350 | .pm_prepare = &r100_pm_prepare, | ||
351 | .pm_finish = &r100_pm_finish, | ||
337 | }; | 352 | }; |
338 | 353 | ||
339 | static struct radeon_asic rs400_asic = { | 354 | static struct radeon_asic rs400_asic = { |
@@ -376,6 +391,9 @@ static struct radeon_asic rs400_asic = { | |||
376 | .gui_idle = &r100_gui_idle, | 391 | .gui_idle = &r100_gui_idle, |
377 | .get_power_state = &r100_get_power_state, | 392 | .get_power_state = &r100_get_power_state, |
378 | .set_power_state = &r100_set_power_state, | 393 | .set_power_state = &r100_set_power_state, |
394 | .pm_misc = &r100_pm_misc, | ||
395 | .pm_prepare = &r100_pm_prepare, | ||
396 | .pm_finish = &r100_pm_finish, | ||
379 | }; | 397 | }; |
380 | 398 | ||
381 | static struct radeon_asic rs600_asic = { | 399 | static struct radeon_asic rs600_asic = { |
@@ -418,6 +436,9 @@ static struct radeon_asic rs600_asic = { | |||
418 | .gui_idle = &r100_gui_idle, | 436 | .gui_idle = &r100_gui_idle, |
419 | .get_power_state = &r100_get_power_state, | 437 | .get_power_state = &r100_get_power_state, |
420 | .set_power_state = &r100_set_power_state, | 438 | .set_power_state = &r100_set_power_state, |
439 | .pm_misc = &rs600_pm_misc, | ||
440 | .pm_prepare = &rs600_pm_prepare, | ||
441 | .pm_finish = &rs600_pm_finish, | ||
421 | }; | 442 | }; |
422 | 443 | ||
423 | static struct radeon_asic rs690_asic = { | 444 | static struct radeon_asic rs690_asic = { |
@@ -460,6 +481,9 @@ static struct radeon_asic rs690_asic = { | |||
460 | .gui_idle = &r100_gui_idle, | 481 | .gui_idle = &r100_gui_idle, |
461 | .get_power_state = &r100_get_power_state, | 482 | .get_power_state = &r100_get_power_state, |
462 | .set_power_state = &r100_set_power_state, | 483 | .set_power_state = &r100_set_power_state, |
484 | .pm_misc = &rs600_pm_misc, | ||
485 | .pm_prepare = &rs600_pm_prepare, | ||
486 | .pm_finish = &rs600_pm_finish, | ||
463 | }; | 487 | }; |
464 | 488 | ||
465 | static struct radeon_asic rv515_asic = { | 489 | static struct radeon_asic rv515_asic = { |
@@ -502,6 +526,9 @@ static struct radeon_asic rv515_asic = { | |||
502 | .gui_idle = &r100_gui_idle, | 526 | .gui_idle = &r100_gui_idle, |
503 | .get_power_state = &r100_get_power_state, | 527 | .get_power_state = &r100_get_power_state, |
504 | .set_power_state = &r100_set_power_state, | 528 | .set_power_state = &r100_set_power_state, |
529 | .pm_misc = &rs600_pm_misc, | ||
530 | .pm_prepare = &rs600_pm_prepare, | ||
531 | .pm_finish = &rs600_pm_finish, | ||
505 | }; | 532 | }; |
506 | 533 | ||
507 | static struct radeon_asic r520_asic = { | 534 | static struct radeon_asic r520_asic = { |
@@ -544,6 +571,9 @@ static struct radeon_asic r520_asic = { | |||
544 | .gui_idle = &r100_gui_idle, | 571 | .gui_idle = &r100_gui_idle, |
545 | .get_power_state = &r100_get_power_state, | 572 | .get_power_state = &r100_get_power_state, |
546 | .set_power_state = &r100_set_power_state, | 573 | .set_power_state = &r100_set_power_state, |
574 | .pm_misc = &rs600_pm_misc, | ||
575 | .pm_prepare = &rs600_pm_prepare, | ||
576 | .pm_finish = &rs600_pm_finish, | ||
547 | }; | 577 | }; |
548 | 578 | ||
549 | static struct radeon_asic r600_asic = { | 579 | static struct radeon_asic r600_asic = { |
@@ -585,6 +615,9 @@ static struct radeon_asic r600_asic = { | |||
585 | .gui_idle = &r600_gui_idle, | 615 | .gui_idle = &r600_gui_idle, |
586 | .get_power_state = &r600_get_power_state, | 616 | .get_power_state = &r600_get_power_state, |
587 | .set_power_state = &r600_set_power_state, | 617 | .set_power_state = &r600_set_power_state, |
618 | .pm_misc = &r600_pm_misc, | ||
619 | .pm_prepare = &rs600_pm_prepare, | ||
620 | .pm_finish = &rs600_pm_finish, | ||
588 | }; | 621 | }; |
589 | 622 | ||
590 | static struct radeon_asic rs780_asic = { | 623 | static struct radeon_asic rs780_asic = { |
@@ -626,6 +659,9 @@ static struct radeon_asic rs780_asic = { | |||
626 | .gui_idle = &r600_gui_idle, | 659 | .gui_idle = &r600_gui_idle, |
627 | .get_power_state = &r600_get_power_state, | 660 | .get_power_state = &r600_get_power_state, |
628 | .set_power_state = &r600_set_power_state, | 661 | .set_power_state = &r600_set_power_state, |
662 | .pm_misc = &r600_pm_misc, | ||
663 | .pm_prepare = &rs600_pm_prepare, | ||
664 | .pm_finish = &rs600_pm_finish, | ||
629 | }; | 665 | }; |
630 | 666 | ||
631 | static struct radeon_asic rv770_asic = { | 667 | static struct radeon_asic rv770_asic = { |
@@ -667,6 +703,9 @@ static struct radeon_asic rv770_asic = { | |||
667 | .gui_idle = &r600_gui_idle, | 703 | .gui_idle = &r600_gui_idle, |
668 | .get_power_state = &r600_get_power_state, | 704 | .get_power_state = &r600_get_power_state, |
669 | .set_power_state = &r600_set_power_state, | 705 | .set_power_state = &r600_set_power_state, |
706 | .pm_misc = &rv770_pm_misc, | ||
707 | .pm_prepare = &rs600_pm_prepare, | ||
708 | .pm_finish = &rs600_pm_finish, | ||
670 | }; | 709 | }; |
671 | 710 | ||
672 | static struct radeon_asic evergreen_asic = { | 711 | static struct radeon_asic evergreen_asic = { |
@@ -706,6 +745,9 @@ static struct radeon_asic evergreen_asic = { | |||
706 | .gui_idle = &r600_gui_idle, | 745 | .gui_idle = &r600_gui_idle, |
707 | .get_power_state = &r600_get_power_state, | 746 | .get_power_state = &r600_get_power_state, |
708 | .set_power_state = &r600_set_power_state, | 747 | .set_power_state = &r600_set_power_state, |
748 | .pm_misc = &evergreen_pm_misc, | ||
749 | .pm_prepare = &evergreen_pm_prepare, | ||
750 | .pm_finish = &evergreen_pm_finish, | ||
709 | }; | 751 | }; |
710 | 752 | ||
711 | int radeon_asic_init(struct radeon_device *rdev) | 753 | int radeon_asic_init(struct radeon_device *rdev) |