diff options
| author | Christian König <christian.koenig@amd.com> | 2014-06-05 23:47:32 -0400 |
|---|---|---|
| committer | Alex Deucher <alexander.deucher@amd.com> | 2014-06-09 22:06:53 -0400 |
| commit | c1c4413258e46aef9c27696052a5b7110bdf2941 (patch) | |
| tree | d6ecbaf532b0886b7269d5679732853baf7ff0f4 | |
| parent | ce6758c8bd36bd77519f8f1ace46f8f1ba5decaf (diff) | |
drm/radeon: make VM size a module parameter (v2)
v2: agd5f: simplify patch
Signed-off-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon.h | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_device.c | 28 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_drv.c | 4 |
3 files changed, 29 insertions, 4 deletions
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h index 3c543eff793b..6f32f16e12dc 100644 --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h | |||
| @@ -100,6 +100,7 @@ extern int radeon_dpm; | |||
| 100 | extern int radeon_aspm; | 100 | extern int radeon_aspm; |
| 101 | extern int radeon_runtime_pm; | 101 | extern int radeon_runtime_pm; |
| 102 | extern int radeon_hard_reset; | 102 | extern int radeon_hard_reset; |
| 103 | extern int radeon_vm_size; | ||
| 103 | 104 | ||
| 104 | /* | 105 | /* |
| 105 | * Copy from radeon_drv.h so we don't have to include both and have conflicting | 106 | * Copy from radeon_drv.h so we don't have to include both and have conflicting |
diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c index 31565de1116c..3f1e3060377c 100644 --- a/drivers/gpu/drm/radeon/radeon_device.c +++ b/drivers/gpu/drm/radeon/radeon_device.c | |||
| @@ -1052,6 +1052,27 @@ static void radeon_check_arguments(struct radeon_device *rdev) | |||
| 1052 | radeon_agpmode = 0; | 1052 | radeon_agpmode = 0; |
| 1053 | break; | 1053 | break; |
| 1054 | } | 1054 | } |
| 1055 | |||
| 1056 | if (!radeon_check_pot_argument(radeon_vm_size)) { | ||
| 1057 | dev_warn(rdev->dev, "VM size (%d) must be a power of 2\n", | ||
| 1058 | radeon_vm_size); | ||
| 1059 | radeon_vm_size = 4096; | ||
| 1060 | } | ||
| 1061 | |||
| 1062 | if (radeon_vm_size < 4) { | ||
| 1063 | dev_warn(rdev->dev, "VM size (%d) to small, min is 4MB\n", | ||
| 1064 | radeon_vm_size); | ||
| 1065 | radeon_vm_size = 4096; | ||
| 1066 | } | ||
| 1067 | |||
| 1068 | /* | ||
| 1069 | * Max GPUVM size for Cayman, SI and CI are 40 bits. | ||
| 1070 | */ | ||
| 1071 | if (radeon_vm_size > 1024*1024) { | ||
| 1072 | dev_warn(rdev->dev, "VM size (%d) to large, max is 1TB\n", | ||
| 1073 | radeon_vm_size); | ||
| 1074 | radeon_vm_size = 4096; | ||
| 1075 | } | ||
| 1055 | } | 1076 | } |
| 1056 | 1077 | ||
| 1057 | /** | 1078 | /** |
| @@ -1197,17 +1218,16 @@ int radeon_device_init(struct radeon_device *rdev, | |||
| 1197 | if (r) | 1218 | if (r) |
| 1198 | return r; | 1219 | return r; |
| 1199 | 1220 | ||
| 1221 | radeon_check_arguments(rdev); | ||
| 1200 | /* Adjust VM size here. | 1222 | /* Adjust VM size here. |
| 1201 | * Currently set to 4GB ((1 << 20) 4k pages). | 1223 | * Max GPUVM size for cayman+ is 40 bits. |
| 1202 | * Max GPUVM size for cayman and SI is 40 bits. | ||
| 1203 | */ | 1224 | */ |
| 1204 | rdev->vm_manager.max_pfn = 1 << 20; | 1225 | rdev->vm_manager.max_pfn = radeon_vm_size << 8; |
| 1205 | 1226 | ||
| 1206 | /* Set asic functions */ | 1227 | /* Set asic functions */ |
| 1207 | r = radeon_asic_init(rdev); | 1228 | r = radeon_asic_init(rdev); |
| 1208 | if (r) | 1229 | if (r) |
| 1209 | return r; | 1230 | return r; |
| 1210 | radeon_check_arguments(rdev); | ||
| 1211 | 1231 | ||
| 1212 | /* all of the newer IGP chips have an internal gart | 1232 | /* all of the newer IGP chips have an internal gart |
| 1213 | * However some rs4xx report as AGP, so remove that here. | 1233 | * However some rs4xx report as AGP, so remove that here. |
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c index 15447a4119f4..a09426c7a2f7 100644 --- a/drivers/gpu/drm/radeon/radeon_drv.c +++ b/drivers/gpu/drm/radeon/radeon_drv.c | |||
| @@ -172,6 +172,7 @@ int radeon_dpm = -1; | |||
| 172 | int radeon_aspm = -1; | 172 | int radeon_aspm = -1; |
| 173 | int radeon_runtime_pm = -1; | 173 | int radeon_runtime_pm = -1; |
| 174 | int radeon_hard_reset = 0; | 174 | int radeon_hard_reset = 0; |
| 175 | int radeon_vm_size = 4096; | ||
| 175 | 176 | ||
| 176 | MODULE_PARM_DESC(no_wb, "Disable AGP writeback for scratch registers"); | 177 | MODULE_PARM_DESC(no_wb, "Disable AGP writeback for scratch registers"); |
| 177 | module_param_named(no_wb, radeon_no_wb, int, 0444); | 178 | module_param_named(no_wb, radeon_no_wb, int, 0444); |
| @@ -239,6 +240,9 @@ module_param_named(runpm, radeon_runtime_pm, int, 0444); | |||
| 239 | MODULE_PARM_DESC(hard_reset, "PCI config reset (1 = force enable, 0 = disable (default))"); | 240 | MODULE_PARM_DESC(hard_reset, "PCI config reset (1 = force enable, 0 = disable (default))"); |
| 240 | module_param_named(hard_reset, radeon_hard_reset, int, 0444); | 241 | module_param_named(hard_reset, radeon_hard_reset, int, 0444); |
| 241 | 242 | ||
| 243 | MODULE_PARM_DESC(vm_size, "VM address space size in megabytes (default 4GB)"); | ||
| 244 | module_param_named(vm_size, radeon_vm_size, int, 0444); | ||
| 245 | |||
| 242 | static struct pci_device_id pciidlist[] = { | 246 | static struct pci_device_id pciidlist[] = { |
| 243 | radeon_PCI_IDS | 247 | radeon_PCI_IDS |
| 244 | }; | 248 | }; |
