drm/amd/amdgpu: Disabling Power Gating for Stoney platform
authorVijendar Mukunda <Vijendar.Mukunda@amd.com>
Sun, 18 Jun 2017 20:41:23 +0000 (02:11 +0530)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 15 Aug 2017 18:46:22 +0000 (14:46 -0400)
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>
drivers/gpu/drm/amd/amdgpu/amdgpu_acp.c

index 2d3fb005355d1df461992d229f9df5f72876897c..a52795d9b45852a371fed81a8f17a51d63bab120 100644 (file)
@@ -285,19 +285,20 @@ static int acp_hw_init(void *handle)
                return 0;
        else if (r)
                return r;
+       if (adev->asic_type != CHIP_STONEY) {
+               adev->acp.acp_genpd = kzalloc(sizeof(struct acp_pm_domain), GFP_KERNEL);
+               if (adev->acp.acp_genpd == NULL)
+                       return -ENOMEM;
 
-       adev->acp.acp_genpd = kzalloc(sizeof(struct acp_pm_domain), GFP_KERNEL);
-       if (adev->acp.acp_genpd == NULL)
-               return -ENOMEM;
-
-       adev->acp.acp_genpd->gpd.name = "ACP_AUDIO";
-       adev->acp.acp_genpd->gpd.power_off = acp_poweroff;
-       adev->acp.acp_genpd->gpd.power_on = acp_poweron;
+               adev->acp.acp_genpd->gpd.name = "ACP_AUDIO";
+               adev->acp.acp_genpd->gpd.power_off = acp_poweroff;
+               adev->acp.acp_genpd->gpd.power_on = acp_poweron;
 
 
-       adev->acp.acp_genpd->cgs_dev = adev->acp.cgs_device;
+               adev->acp.acp_genpd->cgs_dev = adev->acp.cgs_device;
 
-       pm_genpd_init(&adev->acp.acp_genpd->gpd, NULL, false);
+               pm_genpd_init(&adev->acp.acp_genpd->gpd, NULL, false);
+       }
 
        adev->acp.acp_cell = kzalloc(sizeof(struct mfd_cell) * ACP_DEVS,
                                                        GFP_KERNEL);
@@ -388,12 +389,14 @@ static int acp_hw_init(void *handle)
        if (r)
                return r;
 
-       for (i = 0; i < ACP_DEVS ; i++) {
-               dev = get_mfd_cell_dev(adev->acp.acp_cell[i].name, i);
-               r = pm_genpd_add_device(&adev->acp.acp_genpd->gpd, dev);
-               if (r) {
-                       dev_err(dev, "Failed to add dev to genpd\n");
-                       return r;
+       if (adev->asic_type != CHIP_STONEY) {
+               for (i = 0; i < ACP_DEVS ; i++) {
+                       dev = get_mfd_cell_dev(adev->acp.acp_cell[i].name, i);
+                       r = pm_genpd_add_device(&adev->acp.acp_genpd->gpd, dev);
+                       if (r) {
+                               dev_err(dev, "Failed to add dev to genpd\n");
+                               return r;
+                       }
                }
        }
 
@@ -413,20 +416,22 @@ static int acp_hw_fini(void *handle)
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 
        /* return early if no ACP */
-       if (!adev->acp.acp_genpd)
+       if (!adev->acp.acp_cell)
                return 0;
 
-       for (i = 0; i < ACP_DEVS ; i++) {
-               dev = get_mfd_cell_dev(adev->acp.acp_cell[i].name, i);
-               ret = pm_genpd_remove_device(&adev->acp.acp_genpd->gpd, dev);
-               /* If removal fails, dont giveup and try rest */
-               if (ret)
-                       dev_err(dev, "remove dev from genpd failed\n");
+       if (adev->acp.acp_genpd) {
+               for (i = 0; i < ACP_DEVS ; i++) {
+                       dev = get_mfd_cell_dev(adev->acp.acp_cell[i].name, i);
+                       ret = pm_genpd_remove_device(&adev->acp.acp_genpd->gpd, dev);
+                       /* If removal fails, dont giveup and try rest */
+                       if (ret)
+                               dev_err(dev, "remove dev from genpd failed\n");
+               }
+               kfree(adev->acp.acp_genpd);
        }
 
        mfd_remove_devices(adev->acp.parent);
        kfree(adev->acp.acp_res);
-       kfree(adev->acp.acp_genpd);
        kfree(adev->acp.acp_cell);
 
        return 0;