diff options
author | Vijendar Mukunda <Vijendar.Mukunda@amd.com> | 2017-06-18 16:41:23 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-08-15 14:46:22 -0400 |
commit | 43bb3a6d7d14e761baa34627c90c2be40320619b (patch) | |
tree | 25d65322339ddfdf5e124f59881b8ec7f1bbd26d | |
parent | 81454cad0a5137694f67a6c550da9c01492c3246 (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.c | 51 |
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; |