diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_device.c')
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_device.c | 80 |
1 files changed, 75 insertions, 5 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c index 02bcdb1240c..7c6848096bc 100644 --- a/drivers/gpu/drm/radeon/radeon_device.c +++ b/drivers/gpu/drm/radeon/radeon_device.c | |||
| @@ -391,6 +391,12 @@ int radeon_asic_init(struct radeon_device *rdev) | |||
| 391 | /* FIXME: not supported yet */ | 391 | /* FIXME: not supported yet */ |
| 392 | return -EINVAL; | 392 | return -EINVAL; |
| 393 | } | 393 | } |
| 394 | |||
| 395 | if (rdev->flags & RADEON_IS_IGP) { | ||
| 396 | rdev->asic->get_memory_clock = NULL; | ||
| 397 | rdev->asic->set_memory_clock = NULL; | ||
| 398 | } | ||
| 399 | |||
| 394 | return 0; | 400 | return 0; |
| 395 | } | 401 | } |
| 396 | 402 | ||
| @@ -481,6 +487,7 @@ int radeon_atombios_init(struct radeon_device *rdev) | |||
| 481 | atom_card_info->pll_write = cail_pll_write; | 487 | atom_card_info->pll_write = cail_pll_write; |
| 482 | 488 | ||
| 483 | rdev->mode_info.atom_context = atom_parse(atom_card_info, rdev->bios); | 489 | rdev->mode_info.atom_context = atom_parse(atom_card_info, rdev->bios); |
| 490 | mutex_init(&rdev->mode_info.atom_context->mutex); | ||
| 484 | radeon_atom_initialize_bios_scratch_regs(rdev->ddev); | 491 | radeon_atom_initialize_bios_scratch_regs(rdev->ddev); |
| 485 | atom_allocate_fb_scratch(rdev->mode_info.atom_context); | 492 | atom_allocate_fb_scratch(rdev->mode_info.atom_context); |
| 486 | return 0; | 493 | return 0; |
| @@ -539,9 +546,72 @@ void radeon_agp_disable(struct radeon_device *rdev) | |||
| 539 | } | 546 | } |
| 540 | } | 547 | } |
| 541 | 548 | ||
| 542 | /* | 549 | void radeon_check_arguments(struct radeon_device *rdev) |
| 543 | * Radeon device. | 550 | { |
| 544 | */ | 551 | /* vramlimit must be a power of two */ |
| 552 | switch (radeon_vram_limit) { | ||
| 553 | case 0: | ||
| 554 | case 4: | ||
| 555 | case 8: | ||
| 556 | case 16: | ||
| 557 | case 32: | ||
| 558 | case 64: | ||
| 559 | case 128: | ||
| 560 | case 256: | ||
| 561 | case 512: | ||
| 562 | case 1024: | ||
| 563 | case 2048: | ||
| 564 | case 4096: | ||
| 565 | break; | ||
| 566 | default: | ||
| 567 | dev_warn(rdev->dev, "vram limit (%d) must be a power of 2\n", | ||
| 568 | radeon_vram_limit); | ||
| 569 | radeon_vram_limit = 0; | ||
| 570 | break; | ||
| 571 | } | ||
| 572 | radeon_vram_limit = radeon_vram_limit << 20; | ||
| 573 | /* gtt size must be power of two and greater or equal to 32M */ | ||
| 574 | switch (radeon_gart_size) { | ||
| 575 | case 4: | ||
| 576 | case 8: | ||
| 577 | case 16: | ||
| 578 | dev_warn(rdev->dev, "gart size (%d) too small forcing to 512M\n", | ||
| 579 | radeon_gart_size); | ||
| 580 | radeon_gart_size = 512; | ||
| 581 | break; | ||
| 582 | case 32: | ||
| 583 | case 64: | ||
| 584 | case 128: | ||
| 585 | case 256: | ||
| 586 | case 512: | ||
| 587 | case 1024: | ||
| 588 | case 2048: | ||
| 589 | case 4096: | ||
| 590 | break; | ||
| 591 | default: | ||
| 592 | dev_warn(rdev->dev, "gart size (%d) must be a power of 2\n", | ||
| 593 | radeon_gart_size); | ||
| 594 | radeon_gart_size = 512; | ||
| 595 | break; | ||
| 596 | } | ||
| 597 | rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024; | ||
| 598 | /* AGP mode can only be -1, 1, 2, 4, 8 */ | ||
| 599 | switch (radeon_agpmode) { | ||
| 600 | case -1: | ||
| 601 | case 0: | ||
| 602 | case 1: | ||
| 603 | case 2: | ||
| 604 | case 4: | ||
| 605 | case 8: | ||
| 606 | break; | ||
| 607 | default: | ||
| 608 | dev_warn(rdev->dev, "invalid AGP mode %d (valid mode: " | ||
| 609 | "-1, 0, 1, 2, 4, 8)\n", radeon_agpmode); | ||
| 610 | radeon_agpmode = 0; | ||
| 611 | break; | ||
| 612 | } | ||
| 613 | } | ||
| 614 | |||
| 545 | int radeon_device_init(struct radeon_device *rdev, | 615 | int radeon_device_init(struct radeon_device *rdev, |
| 546 | struct drm_device *ddev, | 616 | struct drm_device *ddev, |
| 547 | struct pci_dev *pdev, | 617 | struct pci_dev *pdev, |
| @@ -580,9 +650,9 @@ int radeon_device_init(struct radeon_device *rdev, | |||
| 580 | 650 | ||
| 581 | /* Set asic functions */ | 651 | /* Set asic functions */ |
| 582 | r = radeon_asic_init(rdev); | 652 | r = radeon_asic_init(rdev); |
| 583 | if (r) { | 653 | if (r) |
| 584 | return r; | 654 | return r; |
| 585 | } | 655 | radeon_check_arguments(rdev); |
| 586 | 656 | ||
| 587 | if (rdev->flags & RADEON_IS_AGP && radeon_agpmode == -1) { | 657 | if (rdev->flags & RADEON_IS_AGP && radeon_agpmode == -1) { |
| 588 | radeon_agp_disable(rdev); | 658 | radeon_agp_disable(rdev); |
