aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVijendar Mukunda <Vijendar.Mukunda@amd.com>2017-06-18 16:41:23 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-08-15 14:46:22 -0400
commit43bb3a6d7d14e761baa34627c90c2be40320619b (patch)
tree25d65322339ddfdf5e124f59881b8ec7f1bbd26d
parent81454cad0a5137694f67a6c550da9c01492c3246 (diff)
drm/amd/amdgpu: Disabling Power Gating for Stoney platform
Power Gating is disabled in Stoney platform. Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c51
1 files changed, 28 insertions, 23 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c
index 2d3fb005355d..a52795d9b458 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c
@@ -285,19 +285,20 @@ static int acp_hw_init(void *handle)
285 return 0; 285 return 0;
286 else if (r) 286 else if (r)
287 return r; 287 return r;
288 if (adev->asic_type != CHIP_STONEY) {
289 adev->acp.acp_genpd = kzalloc(sizeof(struct acp_pm_domain), GFP_KERNEL);
290 if (adev->acp.acp_genpd == NULL)
291 return -ENOMEM;
288 292
289 adev->acp.acp_genpd = kzalloc(sizeof(struct acp_pm_domain), GFP_KERNEL); 293 adev->acp.acp_genpd->gpd.name = "ACP_AUDIO";
290 if (adev->acp.acp_genpd == NULL) 294 adev->acp.acp_genpd->gpd.power_off = acp_poweroff;
291 return -ENOMEM; 295 adev->acp.acp_genpd->gpd.power_on = acp_poweron;
292
293 adev->acp.acp_genpd->gpd.name = "ACP_AUDIO";
294 adev->acp.acp_genpd->gpd.power_off = acp_poweroff;
295 adev->acp.acp_genpd->gpd.power_on = acp_poweron;
296 296
297 297
298 adev->acp.acp_genpd->cgs_dev = adev->acp.cgs_device; 298 adev->acp.acp_genpd->cgs_dev = adev->acp.cgs_device;
299 299
300 pm_genpd_init(&adev->acp.acp_genpd->gpd, NULL, false); 300 pm_genpd_init(&adev->acp.acp_genpd->gpd, NULL, false);
301 }
301 302
302 adev->acp.acp_cell = kzalloc(sizeof(struct mfd_cell) * ACP_DEVS, 303 adev->acp.acp_cell = kzalloc(sizeof(struct mfd_cell) * ACP_DEVS,
303 GFP_KERNEL); 304 GFP_KERNEL);
@@ -388,12 +389,14 @@ static int acp_hw_init(void *handle)
388 if (r) 389 if (r)
389 return r; 390 return r;
390 391
391 for (i = 0; i < ACP_DEVS ; i++) { 392 if (adev->asic_type != CHIP_STONEY) {
392 dev = get_mfd_cell_dev(adev->acp.acp_cell[i].name, i); 393 for (i = 0; i < ACP_DEVS ; i++) {
393 r = pm_genpd_add_device(&adev->acp.acp_genpd->gpd, dev); 394 dev = get_mfd_cell_dev(adev->acp.acp_cell[i].name, i);
394 if (r) { 395 r = pm_genpd_add_device(&adev->acp.acp_genpd->gpd, dev);
395 dev_err(dev, "Failed to add dev to genpd\n"); 396 if (r) {
396 return r; 397 dev_err(dev, "Failed to add dev to genpd\n");
398 return r;
399 }
397 } 400 }
398 } 401 }
399 402
@@ -413,20 +416,22 @@ static int acp_hw_fini(void *handle)
413 struct amdgpu_device *adev = (struct amdgpu_device *)handle; 416 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
414 417
415 /* return early if no ACP */ 418 /* return early if no ACP */
416 if (!adev->acp.acp_genpd) 419 if (!adev->acp.acp_cell)
417 return 0; 420 return 0;
418 421
419 for (i = 0; i < ACP_DEVS ; i++) { 422 if (adev->acp.acp_genpd) {
420 dev = get_mfd_cell_dev(adev->acp.acp_cell[i].name, i); 423 for (i = 0; i < ACP_DEVS ; i++) {
421 ret = pm_genpd_remove_device(&adev->acp.acp_genpd->gpd, dev); 424 dev = get_mfd_cell_dev(adev->acp.acp_cell[i].name, i);
422 /* If removal fails, dont giveup and try rest */ 425 ret = pm_genpd_remove_device(&adev->acp.acp_genpd->gpd, dev);
423 if (ret) 426 /* If removal fails, dont giveup and try rest */
424 dev_err(dev, "remove dev from genpd failed\n"); 427 if (ret)
428 dev_err(dev, "remove dev from genpd failed\n");
429 }
430 kfree(adev->acp.acp_genpd);
425 } 431 }
426 432
427 mfd_remove_devices(adev->acp.parent); 433 mfd_remove_devices(adev->acp.parent);
428 kfree(adev->acp.acp_res); 434 kfree(adev->acp.acp_res);
429 kfree(adev->acp.acp_genpd);
430 kfree(adev->acp.acp_cell); 435 kfree(adev->acp.acp_cell);
431 436
432 return 0; 437 return 0;