diff --git a/drivers/gpu/msm/kgsl.c b/drivers/gpu/msm/kgsl.c index 1c861a70bff9..1b344cd066db 100644 --- a/drivers/gpu/msm/kgsl.c +++ b/drivers/gpu/msm/kgsl.c @@ -4367,11 +4367,6 @@ int kgsl_device_platform_probe(struct kgsl_device *device) if (status) goto error; - /* This can return -EPROBE_DEFER */ - status = kgsl_mmu_probe(device); - if (status != 0) - goto error_pwrctrl_close; - if (!devm_request_mem_region(&pdev->dev, device->reg_phys, device->reg_len, device->name)) { dev_err(device->dev, "request_mem_region failed\n"); @@ -4411,6 +4406,11 @@ int kgsl_device_platform_probe(struct kgsl_device *device) goto error_pwrctrl_close; } + /* This can return -EPROBE_DEFER */ + status = kgsl_mmu_probe(device); + if (status != 0) + goto error_pwrctrl_close; + kgsl_device_debugfs_init(device); dma_set_coherent_mask(&pdev->dev, KGSL_DMA_BIT_MASK); @@ -4424,6 +4424,11 @@ int kgsl_device_platform_probe(struct kgsl_device *device) return 0; error_pwrctrl_close: + if (device->events_wq) { + destroy_workqueue(device->events_wq); + device->events_wq = NULL; + } + kgsl_pwrctrl_close(device); error: _unregister_device(device); diff --git a/drivers/gpu/msm/kgsl_pwrscale.c b/drivers/gpu/msm/kgsl_pwrscale.c index 0701237b12e2..870f090c769e 100644 --- a/drivers/gpu/msm/kgsl_pwrscale.c +++ b/drivers/gpu/msm/kgsl_pwrscale.c @@ -857,8 +857,11 @@ int kgsl_pwrscale_init(struct kgsl_device *device, struct platform_device *pdev, } pwrscale->devfreq_wq = create_freezable_workqueue("kgsl_devfreq_wq"); - if (!pwrscale->devfreq_wq) + if (!pwrscale->devfreq_wq) { + dev_err(device->dev, "Failed to allocate kgsl devfreq workqueue\n"); + device->pwrscale.enabled = false; return -ENOMEM; + } devfreq = devfreq_add_device(&pdev->dev, &gpu_profile->profile, governor, &adreno_tz_data);