@@ -1503,6 +1503,11 @@ static void __iomem *a6xx_gmu_get_mmio(struct platform_device *pdev,
return ERR_PTR(-EINVAL);
}
+ if (!devm_request_mem_region(&pdev->dev, res->start, resource_size(res), name)) {
+ DRM_DEV_ERROR(&pdev->dev, "Unable to reserve the %s registers\n", name);
+ return ERR_PTR(-EBUSY);
+ }
+
ret = ioremap(res->start, resource_size(res));
if (!ret) {
DRM_DEV_ERROR(&pdev->dev, "Unable to map the %s registers\n", name);
@@ -59,6 +59,10 @@ void __iomem *msm_ioremap_mdss(struct platform_device *mdss_pdev,
res = platform_get_resource_byname(mdss_pdev, IORESOURCE_MEM, name);
if (!res)
return ERR_PTR(-EINVAL);
+
+ if (!devm_request_mem_region(&pdev->dev, res->start, resource_size(res), name)) {
+ return ERR_PTR(-EBUSY);
+ }
return devm_ioremap_resource(&pdev->dev, res);
}
@@ -83,6 +87,12 @@ static void __iomem *_msm_ioremap(struct platform_device *pdev, const char *name
size = resource_size(res);
+ if (!devm_request_mem_region(&pdev->dev, res->start, size, name)) {
+ if (!quiet)
+ DRM_DEV_ERROR(&pdev->dev, "failed to reserve memory resource: %s\n", name);
+ return ERR_PTR(-EBUSY);
+ }
+
ptr = devm_ioremap(&pdev->dev, res->start, size);
if (!ptr) {
if (!quiet)
The driver's memory regions are currently just ioremap()ed, but not reserved through a request. That's not a bug, but having the request is a little more robust. Implement the region-request through the corresponding managed devres-function. Signed-off-by: Kiarash Hajian <kiarash8112hajian@gmail.com> --- drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 5 +++++ drivers/gpu/drm/msm/msm_io_utils.c | 10 ++++++++++ 2 files changed, 15 insertions(+)