diff options
author | Jerome Glisse <jglisse@redhat.com> | 2009-12-11 15:18:34 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2009-12-22 20:14:05 -0500 |
commit | 3642133816f9f25065e3ca310f0720574bcdcc52 (patch) | |
tree | 08c9bcec6592d8a8cfe194c5c32bf392c18f7848 /drivers | |
parent | 0a0c7596c643239e8d4c3eaaba43b74a96f2411e (diff) |
drm/radeon/kms: Check module arguments to be valid V2
This patch add a function which check module argument to be
valid. On invalid argument it prints a warning and setback
the default value.
V2: Allow 0 for vram limit & agp mode which are the default
value
Signed-off-by: Jerome Glisse <jglisse@redhat.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_device.c | 73 |
1 files changed, 68 insertions, 5 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c index 14df3ad64f94..7c6848096bcd 100644 --- a/drivers/gpu/drm/radeon/radeon_device.c +++ b/drivers/gpu/drm/radeon/radeon_device.c | |||
@@ -546,9 +546,72 @@ void radeon_agp_disable(struct radeon_device *rdev) | |||
546 | } | 546 | } |
547 | } | 547 | } |
548 | 548 | ||
549 | /* | 549 | void radeon_check_arguments(struct radeon_device *rdev) |
550 | * Radeon device. | 550 | { |
551 | */ | 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 | |||
552 | int radeon_device_init(struct radeon_device *rdev, | 615 | int radeon_device_init(struct radeon_device *rdev, |
553 | struct drm_device *ddev, | 616 | struct drm_device *ddev, |
554 | struct pci_dev *pdev, | 617 | struct pci_dev *pdev, |
@@ -587,9 +650,9 @@ int radeon_device_init(struct radeon_device *rdev, | |||
587 | 650 | ||
588 | /* Set asic functions */ | 651 | /* Set asic functions */ |
589 | r = radeon_asic_init(rdev); | 652 | r = radeon_asic_init(rdev); |
590 | if (r) { | 653 | if (r) |
591 | return r; | 654 | return r; |
592 | } | 655 | radeon_check_arguments(rdev); |
593 | 656 | ||
594 | if (rdev->flags & RADEON_IS_AGP && radeon_agpmode == -1) { | 657 | if (rdev->flags & RADEON_IS_AGP && radeon_agpmode == -1) { |
595 | radeon_agp_disable(rdev); | 658 | radeon_agp_disable(rdev); |