static int amdgpu_powerplay_init(struct amdgpu_device *adev) { int ret = 0; struct amd_powerplay *amd_pp; amd_pp = &(adev->powerplay); if (adev->pp_enabled) { #ifdef CONFIG_DRM_AMD_POWERPLAY struct amd_pp_init *pp_init; pp_init = kzalloc(sizeof(struct amd_pp_init), GFP_KERNEL); if (pp_init == NULL) return -ENOMEM; pp_init->chip_family = adev->family; pp_init->chip_id = adev->asic_type; pp_init->device = amdgpu_cgs_create_device(adev); ret = amd_powerplay_init(pp_init, amd_pp); kfree(pp_init); #endif } else { amd_pp->pp_handle = (void *)adev; switch (adev->asic_type) { #ifdef CONFIG_DRM_AMDGPU_CIK case CHIP_BONAIRE: case CHIP_HAWAII: amd_pp->ip_funcs = &ci_dpm_ip_funcs; break; case CHIP_KABINI: case CHIP_MULLINS: case CHIP_KAVERI: amd_pp->ip_funcs = &kv_dpm_ip_funcs; break; #endif case CHIP_TOPAZ: amd_pp->ip_funcs = &iceland_dpm_ip_funcs; break; case CHIP_TONGA: amd_pp->ip_funcs = &tonga_dpm_ip_funcs; break; case CHIP_FIJI: amd_pp->ip_funcs = &fiji_dpm_ip_funcs; break; case CHIP_CARRIZO: case CHIP_STONEY: amd_pp->ip_funcs = &cz_dpm_ip_funcs; break; default: ret = -EINVAL; break; } } return ret; }
static int acp_sw_init(void *handle) { struct amdgpu_device *adev = (struct amdgpu_device *)handle; adev->acp.parent = adev->dev; adev->acp.cgs_device = amdgpu_cgs_create_device(adev); if (!adev->acp.cgs_device) return -EINVAL; return 0; }
static int amdgpu_create_pp_handle(struct amdgpu_device *adev) { struct amd_pp_init pp_init; struct amd_powerplay *amd_pp; int ret; amd_pp = &(adev->powerplay); pp_init.chip_family = adev->family; pp_init.chip_id = adev->asic_type; pp_init.pm_en = (amdgpu_dpm != 0 && !amdgpu_sriov_vf(adev)) ? true : false; pp_init.feature_mask = amdgpu_pp_feature_mask; pp_init.device = amdgpu_cgs_create_device(adev); ret = amd_powerplay_create(&pp_init, &(amd_pp->pp_handle)); if (ret) return -EINVAL; return 0; }